SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG
DONATE


YUM REPOSITORY

 
 

MAN page from Fedora 28 perl-XML-Hash-LX-0.60.300-5.fc28.noarch.rpm

XML::Hash::LX

Section: User Contributed Perl Documentation (3)
Updated: 2011-08-19
Index 

NAME

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

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 $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 itunder the same terms as Perl itself.


 

Index

NAME
SYNOPSIS
DESCRIPTION
EXPORT
:inject
FUNCTIONS
xml2hash $xml, [ OPTIONS ]
hash2xml $hash, [ doc => 1, ] [ OPTIONS ]
OPTIONS
%XML::Hash::LX::X2H
$XML::Hash::LX::X2A [ = 0 ]
%XML::Hash::LX::X2A
%XML::Hash::LX::H2X
BUGS
SEE ALSO
AUTHOR
COPYRIGHT & LICENSE

This document was created byman2html,using the manual pages.