NAME
XML::Struct::Writer - Process ordered XML as stream, for instance to write XML
VERSION
version 0.03
SYNOPSIS
use XML::Struct::Writer;
my $writer = XML::Struct::Writer->new;
my $xml = $writer->write( [
greet => { }, [
"Hello, ",
[ emph => { color => "blue" } , [ "World" ] ],
"!"
]
] );
$xml->setEncoding("UTF-8");
$xml->toFile("greet.xml");
# <?xml version="1.0" encoding="UTF-8"?>
# <greet>Hello, <emph color="blue">World</emph>!</greet>
my $writer = XML::Struct::Writer->new( attributes => 0 );
$writer->writeDocument( [
doc => [
[ name => [ "alice" ] ],
[ name => [ "bob" ] ],
]
] )->serialize(1);
# <?xml version="1.0"?>
# <doc>
# <name>alice</name>
# <name>bob</name>
# </doc>
DESCRIPTION
This module transforms an XML document, given as in form of a data structure as described in XML::Struct, into a stream of SAX events. By default, the stream is used to build a XML::LibXML::Document that can be used for instance to write the XML document to a file.
METHODS
write( $root ) == writeDocument( $root )
Write an XML document, given in form of its root element, to the handler. Returns the handler's result, if it support a result
method.
writeElement( $element [, @more_elements ] )
Write an XML element to the handler. Note that the default handler requires to also call writeStart
and writeEnd
when using this method:
$writer->writeStart( [ "root", { some => "attribute" } ] );
$writer->writeElement( $element1 );
$writer->writeElement( $element2, $element3 );
...
$writer->writeEnd( [ "root" ] );
writeStartElement( $element )
writeEndElement( $element )
writeCharacters( $string )
writeStart( [ $root ] )
Call the handler's start_document
and optionally start_element
. Calling $writer->writeStart($root)
is equivalent to:
$writer->writeStart;
$writer->writeStartElement($root);
writeEnd( [ $root ] )
Call the handler's end_document
and optionally end_element
. Calling $writer->writeEnd($root)
is equivalent to:
$writer->writeEndElement($root);
$writer->writeEnd;
CONFIGURATION
The handler
property can be used to specify a SAX handler that XML stream events are send to. By default XML::LibXML::SAX::Builder is used to build a DOM that is serialized afterwards. Using another handler should be more performant for serialization. See XML::Writer, XML::Handler::YAWriter (and possibly XML::SAX::Writer combined with XML::Filter::SAX1toSAX2) for stream-based XML writers.
Handlers do not need to support all features of SAX. A handler is expected to implement the following methods:
- start_document()
- start_element( { Name => $name, Attributes => \%attributes } )
- end_element( { Name => $name } )
- characters( { Data => $characters } )
- end_document()
If the handler further implements a result()
method, it is called at the end of writeDocument
.
If attributes
property is set to a false value (true by default), elements are expected to be passed without attributes hash as implemented in XML::Struct::Reader.
AUTHOR
Jakob Voß
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Jakob Voß.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.