File: README

package info (click to toggle)
libxml-hash-lx-perl 0.0603-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 408 kB
  • sloc: perl: 2,603; makefile: 5
file content (239 lines) | stat: -rw-r--r-- 7,089 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
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 it
    under the same terms as Perl itself.