XML-Hash-LX

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

    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 )