The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

XML::Parser::Style::ETree - Parse xml to simple tree

VERSION

Version 0.09

SYNOPSIS

        use XML::Parser;
        my $p = XML::Parser->new( Style => 'ETree' );

EXAMPLE

        <root at="key">
                <nest>
                        first
                        <v>a</v>
                        mid
                        <v at="a">b</v>
                        <vv></vv>
                        last
                </nest>
        </root>

will be

        {
                root => {
                        '-at' => 'key',
                        nest => {
                                '#text' => 'firstmidlast',
                                vv => '',
                                v => [
                                        'a',
                                        {
                                                '-at' => 'a',
                                                '#text' => 'b'
                                        }
                                ]
                        }
                }
        }

SPECIAL VARIABLES

$TEXT{ATTR} [ = '-' ]

Allow to set prefix for name of attribute nodes;

        <item attr="value" />
        # will be
        item => { -attr => 'value' };

        # with
        $TEXT{ATTR} = '+';
        # will be
        item => { '+attr' => 'value' };
        
$TEXT{NODE} [ = '#text' ]

Allow to set name for text nodes

        <item><sub attr="t"></sub>Text value</item>
        # will be
        item => { sub => { -attr => "t" }, #text => 'Text value' };

        # with
        $TEXT{NODE} = '';
        # will be
        item => { sub => { -attr => "t" }, '' => 'Text value' };
$TEXT{JOIN} [ = '' ]

Allow to set join separator for text node, splitted by subnodes

        <item>Test1<sub />Test2</item>
        # will be
        item => { sub => '', #text => 'Test1Test2' };

        # with
        $TEXT{JOIN} = '+';
        # will be
        item => { sub => '', #text => 'Test1+Test2' };
$TEXT{TRIM} [ = 1 ]

Trim leading and trailing whitespace from text nodes

        <item>  Test1  <sub />  Test2  </item>
        # will be
        item => { sub => '', #text => 'Test1Test2' };

        # with
        $TEXT{TRIM} = 0;
        # will be
        item => { sub => '', #text => '  Test1    Test2  ' };
%FORCE_ARRAY

Allow to force nodes to be represented always as arrays. If name is empty string, then ot means ALL

        <item><sub attr="t"></sub>Text value</item>

        # will be
        item => { sub => { -attr => "t" }, #text => 'Text value' };

        # with
        $FORCE_ARRAY{sub} = 1;
        # will be
        item => { sub => [ { -attr => "t" } ], #text => 'Text value' };

        # with
        $FORCE_ARRAY{''} = 1;
        # will be
        item => [ { sub => [ { -attr => "t" } ], #text => 'Text value' } ];
%FORCE_HASH

Allow to force text-only nodes to be represented always as hashes. If name is empty string, then ot means ALL

        <item><sub>Text value</sub><any>Text value</any></item>

        # will be
        item => { sub => 'Text value', any => 'Text value' };

        # with
        $FORCE_HASH{sub} = 1;
        # will be
        item => { sub => { #text => 'Text value' }, any => 'Text value' };

        # with
        $FORCE_HASH{''} = 1;
        # will be
        item => { sub => { #text => 'Text value' }, any => { #text => 'Text value' } };
@STRIP_KEY

Allow to strip something from tag names by regular expressions

        <a:item><b:sub>Text value</b:sub></a:item>

        # will be
        'a:item' => { 'b:sub' => 'Text value' };

        # with
        @STRIP_KEY = (qr/^[^:]+:/);
        # will be
        'item' => { 'sub' => 'Text value' };

SEE ALSO

AUTHOR

Mons Anderson, <mons at cpan.org>

BUGS

None known

COPYRIGHT & LICENSE

Copyright 2009 Mons Anderson

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.