GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  XML::HASH::LX (3)

.ds Aq ’

NAME

XML::Hash::LX - Convert hash to xml and xml to hash using LibXML

CONTENTS

SYNOPSIS



    use XML::Hash::LX;

    my $hash = xml2hash $xmlstring, attr => ., text => ~;
    my $hash = xml2hash $xmldoc;
   
    my $xmlstr = hash2html $hash, attr => +, text => #text;
    my $xmldoc = hash2html $hash, doc => 1, attr => +;
   
    # Usage with XML::LibXML

    my $doc = XML::LibXML->new->parse_string($xml);
    my $xp  = XML::LibXML::XPathContext->new($doc);
    $xp->registerNs(rss, http://purl.org/rss/1.0/);

    # then process xpath
    for ($xp->findnodes(//rss:item)) {
        # and convert to hash concrete nodes
        my $item = xml2hash($_);
        print Dumper+$item
    }



DESCRIPTION

This module is a companion for XML::LibXML. It operates with LibXML objects, could return or accept LibXML objects, and may be used for easy data transformations

It is faster in parsing then XML::Simple, XML::Hash, XML::Twig and of course much slower than XML::Bare ;)

It is faster in composing than XML::Hash, but slower than XML::Simple

Parse benchmark:



               Rate   Simple     Hash     Twig Hash::LX     Bare
    Simple   11.3/s       --      -2%     -16%     -44%     -97%
    Hash     11.6/s       2%       --     -14%     -43%     -97%
    Twig     13.5/s      19%      16%       --     -34%     -96%
    Hash::LX 20.3/s      79%      75%      51%       --     -95%
    Bare      370/s    3162%    3088%    2650%    1721%       --



Compose benchmark:



               Rate     Hash Hash::LX   Simple
    Hash     49.2/s       --     -18%     -40%
    Hash::LX 60.1/s      22%       --     -26%
    Simple   81.5/s      66%      36%       --



Benchmark was done on <http://search.cpan.org/uploads.rdf>

EXPORT

xml2hash and hash2xml are exported by default

    :inject

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 CW$xml, [ OPTIONS ]

XML could be XML::LibXML::Document, XML::LibXML::DocumentPart or string

hash2xml CW$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

CW%XML::Hash::LX::X2H

Options respecting convertations from xml to hash
order [ = 0 ] <B>StrictlyB> 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 } }



CW$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 => [  ] } ] }



CW%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 => [  ] } }



CW%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> # its 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> # its very bad! ;)

        # comm = /
        { node => { / => test } } => <node><!-- test --></node>



BUGS

None known

SEE ALSO

o 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.

Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 XML::HASH::LX (3) 2011-08-19

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.