XML-Hash-LX
view release on metacpan or search on metacpan
Inject toHash method in the namespace of XML::LibXML::Node and allow to
call it on any subclass of XML::LibXML::Node directly
By default is disabled
use XML::Hash::LX ':inject';
my $doc = XML::LibXML->new->parse_string($xml);
my $hash = $doc->toHash(%opts);
FUNCTIONS
xml2hash $xml, [ OPTIONS ]
XML could be XML::LibXML::Document, XML::LibXML::DocumentPart or string
hash2xml $hash, [ doc => 1, ] [ OPTIONS ]
Id "doc" option is true, then returned value is XML::LibXML::Document,
not string
OPTIONS
Every option could be passed as arguments to function or set as global
variable in "XML::Hash::LX" namespace
%XML::Hash::LX::X2H
Options respecting convertations from xml to hash
order [ = 0 ]
Strictly keep the output order. When enabled, structures become more
complex, but xml could be completely reverted
attr [ = '-' ]
Attribute prefix
<node attr="test" /> => { node => { -attr => "test" } }
text [ = '#text' ]
Key name for storing text
<node>text<sub /></node> => { node => { sub => '', '#text' => "test" } }
join [ = '' ]
Join separator for text nodes, splitted by subnodes
Ignored when "order" in effect
# default:
xml2hash( '<item>Test1<sub />Test2</item>' )
: { item => { sub => '', '~' => 'Test1Test2' } };
# global
$XML::Hash::LX::X2H{join} = '+';
xml2hash( '<item>Test1<sub />Test2</item>' )
: { item => { sub => '', '~' => 'Test1+Test2' } };
# argument
xml2hash( '<item>Test1<sub />Test2</item>', join => '+' )
: { item => { sub => '', '~' => 'Test1+Test2' } };
trim [ = 1 ]
Trim leading and trailing whitespace from text nodes
cdata [ = undef ]
When defined, CDATA sections will be stored under this key
# cdata = undef
<node><![CDATA[ test ]]></node> => { node => 'test' }
# cdata = '#'
<node><![CDATA[ test ]]></node> => { node => { '#' => 'test' } }
comm [ = undef ]
When defined, comments sections will be stored under this key
When undef, comments will be ignored
# comm = undef
<node><!-- comm --><sub/></node> => { node => { sub => '' } }
# comm = '/'
<node><!-- comm --><sub/></node> => { node => { sub => '', '/' => 'comm' } }
$XML::Hash::LX::X2A [ = 0 ]
Global array casing
Ignored when "X2H{order}" in effect
As option should be passed as
xml2hash $xml, array => 1;
Effect:
# $X2A = 0
<node><sub/></node> => { node => { sub => '' } }
# $X2A = 1
<node><sub/></node> => { node => [ { sub => [ '' ] } ] }
%XML::Hash::LX::X2A
By element array casing
Ignored when "X2H{order}" in effect
As option should be passed as
xml2hash $xml, array => [ nodes list ];
Effect:
# %X2A = ()
<node><sub/></node> => { node => { sub => '' } }
# %X2A = ( sub => 1 )
<node><sub/></node> => { node => { sub => [ '' ] } }
%XML::Hash::LX::H2X
Options respecting convertations from hash to xml
encoding [ = 'utf-8' ]
XML output encoding
attr [ = '-' ]
Attribute prefix
{ node => { -attr => "test", sub => 'test' } }
<node attr="test"><sub>test</sub></node>
text [ = '#text' ]
Key name for storing text
{ node => { sub => '', '#text' => "test" } }
<node>text<sub /></node>
# or
<node><sub />text</node>
# order of keys is not predictable
trim [ = 1 ]
Trim leading and trailing whitespace from text nodes
# trim = 1
{ node => { sub => [ ' ', 'test' ], '#text' => "test" } }
<node>test<sub>test</sub></node>
# trim = 0
{ node => { sub => [ ' ', 'test' ], '#text' => "test" } }
<node>test<sub> test</sub></node>
cdata [ = undef ]
When defined, such key elements will be saved as CDATA sections
# cdata = undef
{ node => { '#' => 'test' } } => <node><#>test</#></node> # it's bad ;)
# cdata = '#'
{ node => { '#' => 'test' } } => <node><![CDATA[test]]></node>
comm [ = undef ]
When defined, such key elements will be saved as comment sections
# comm = undef
{ node => { '/' => 'test' } } => <node></>test<//></node> # it's very bad! ;)
# comm = '/'
{ node => { '/' => 'test' } } => <node><!-- test --></node>
BUGS
None known
SEE ALSO
* XML::Parser::Style::EasyTree
With default settings should produce the same output as this module.
Settings are similar by effect
AUTHOR
Mons Anderson, "<mons at cpan.org>"
COPYRIGHT & LICENSE
Copyright 2009 Mons Anderson, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
( run in 1.602 second using v1.01-cache-2.11-cpan-39bf76dae61 )