Adrian Witas > Simple-SAX-Serializer-0.05 > Simple::SAX::Serializer::Handler

Download:
Simple-SAX-Serializer-0.05.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.02   Source  

NAME ^

Simple::SAX::Serializer::Handler - Collections of the mapping handlers for Simple::SAX::Serializer.

SYNOPSIS ^

    use Simple::SAX::Serializer::Handler ':all';
    use Simple::SAX::Serializer;

    my $xml = Simple::SAX::Serializer->new;
    $xml->handler('node', array_handler());
    ...
    my $result = $xml->parse_string($xml_content);

DESCRIPTION ^

Collections of the mapping handlers for Simple::SAX::Serializer.

EXPORT ^

array_handler array_of_objects_handler hash_handler hash_item_of_child_value_handler hash_of_object_array_handler hash_of_array_handler ignore_node_handler custom_array_handler object_handler root_object_handler by ':all' tag

METHODS

array_handler

Takes optionally storage key to the array(by default the element name). Returns handler for transforming nodes value into array

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root >
        <node>value1</node>
        <node>value2</node>
        <nodeA>value1</nodeA>
        <nodeA>value2</nodeA>
    </root>
    XML


    my $xml = Simple::SAX::Serializer->new;

    $xml->handler('node', array_handler());
    $xml->handler('nodeA', array_handler());
    $xml->handler('root', sub {
        my ($self, $element, $parent) = @_;
        my $attributes = $element->attributes;
        my $result = $element->children_result;
    });
    my $result = $xml->parse_string($xml_content);
    #transforms $result to {{node => ['value1' ,'value2'], nodeA => ['value1', 'value2']}
array_of_objects_handler

Returns handler for transforming nodes attribute into array of the objects. Takes class name or constructor code reference as parameter, array ref of the required attributes, hash_ref of the optional attributes,

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <object1 attr1="1" />
        <object1 attr1="2" />
        <object2 attr1="3" />
        <object2 attr1="4" />
    </root>
    XML

    package Object1;
    sub new {
        my $class = shift;
        bless {@_}, $class
    };

    package Object2;
    sub new {
        my $class = shift;
        bless {@_}, $class
    };

    sub object2{
        Object2->new(@_);
    }

    my $xml = Simple::SAX::Serializer->new;

    $xml->handler('object1', ::array_of_objects_handler('Object1', ['attr1']));
    $xml->handler('object2', ::array_of_objects_handler(\&object2, ['attr1']));
    $xml->handler('root', sub {
        my ($self, $element, $parent) = @_;
        my $attributes = $element->attributes;
        $element->children_result;
    });
    my $result = $xml->parse_string($xml_content);

    #transforms $result to [
        Object1->new(attr1 => 1),
        Object1->new(attr1 => 2),
        Object2->new(attr1 => 3),
        Object2->new(attr1 => 4),
    ];
hash_of_object_array_handler

Returns handler for transforming nodes attribute into array of the objects, that is stored as hash item of the parent node. Takes class name or constructor code reference as parameter, array ref of the required attributes, hash_ref of the optional attributes, storage key to the array(by default the element name).

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <object1 attr1="1" />
        <object1 attr1="2" />
    </root>
    XML

    my $xml = Simple::SAX::Serializer->new;

    $xml->handler('object1', hash_of_object_array_handler('Object1', ['attr1']));
    $xml->handler('root', sub {
        my ($self, $element, $parent) = @_;
        my $attributes = $element->attributes;
        $element->children_result;
    });
    my $result = $xml->parse_string($xml_content);

    #transforms $result to [
        Object1->new(attr1 => 1),
        Object1->new(attr1 => 2),
        Object2->new(attr1 => 3),
        Object2->new(attr1 => 4),
    ];
hash_of_array_handler

Returns handler for transforming nodes attribute into array of the hash items, that is stored as hash item of the parent node. Takes array ref of the required attributes, hash_ref of the optional attributes, storage key to the array(by default the element name).

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <object1 attr1="1" />
        <object1 attr1="2" />
    </root>
    XML

    my $xml = Simple::SAX::Serializer->new;

    $xml->handler('object1', hash_of_array_handler(['attr1']));
    $xml->handler('root', root_object_handler('Root'));

    my $result = $xml->parse_string($xml_content);
    #converts result to 
    Root->new(object1 => [{attr1 => 1}, {attr1 => 2}]);
hash_handler

Takes optionally parent storage key to the hash item (by default the element name). optionally attribute name for the hash key (by default name). Returns handler for transforming node into hash item. Key of the hash is evaluated from the name node's attribute. Value of the hash is evaluated from the node's value.

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <node name="key1">value1</node>
        <node name="key2">value2</node>
        <node name="key3">value3</node>
    </root>
    XML

    my $xml = Simple::SAX::Serializer->new;
    $xml->handler('node', hash_handler());
    $xml->handler('root', root_object_handler('Root'));
    my $result = $xml->parse_string($xml_content);

    #transforms $result to Root->new(node => {key1 => 'value1', key2 => 'value2', key3 => 'value3'})
hash_item_of_child_value_handler

Takes optionally parent storage key to the hash item (by default the element name). Returns handler for transforming child node value into hash value Key of the hash is evaluated from current element name.

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <objects>
            <object1 attr1="1" />
            <object1 attr1="2" />
        </objects>
        <objects2>
            <object2 attr1="3" />
            <object2 attr1="4" />
        </objects2>
    </root>
    XML

    my $xml = Simple::SAX::Serializer->new;
    $xml->handler('objects', hash_item_of_child_value_handler());
    $xml->handler('object1', array_of_objects_handler('Object1'));

    $xml->handler('objects2', hash_item_of_child_value_handler());
    $xml->handler('object2', array_of_objects_handler('Object2'));
    $xml->handler('root', sub {
        my ($self, $element, $parent) = @_;
        my $attributes = $element->attributes;
        $element->children_result;
    });
    my $result = $xml->parse_string($xml_content);
    #transforms $result to {
        objects => [Object1->new(attr1 => 1), Object1->new(attr1 => 2),],
        objects2 => [Object2->new(attr1 => 3), Object2->new(attr1 => 4),]
    };
root_object_handler

Returns handler for transforming root node into an object,

Takes class name or constructor code reference, optionally code reference to customize return values, array ref of the required attributes, hash_ref of the optional attributes,

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root attr1="1" attr2="2">
        <objects>
            <object1 attr1="1" />
            <object1 attr1="2" />
        </objects>
        <object2>3</object2>
        <object2>4</object2>

    </root>
    XML

    {
        package Root;
        sub new {
            my $class = shift;
            bless {@_}, $class
        };
    }

    my $xml = Simple::SAX::Serializer->new;
    $xml->handler('objects', hash_item_of_child_value_handler());
    $xml->handler('object1', array_of_objects_handler('Object1'));
    $xml->handler('object2', array_handler());
    $xml->handler('root', root_object_handler('Root'));

    #transforms $result to 
    Root->new(
        attr1 => 1, attr2 => 2,
        objects => [Object1->new(attr1 => 1), Object1->new(attr1 => 2),],
        object2 => [3, 4]
    );
ignore_node_handler
custom_array_handler

Returns handler for transforming roo node to object, Takes hash ref as custom result storage, optionally array ref of the required attributes, hash_ref of the optional attributes, custom storage key to the hash item (by default the element name). This options allows parsing only part of the xml document.

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <node name="key1" attr1="1" />
        <node name="key2" attr1="2" />
    </root>
    XML


    my $result = {};
    my $xml = Simple::SAX::Serializer->new;
    $xml->handler('root', ignore_node_handler());
    $xml->handler('node', custom_array_handler($result, ['name', 'attr1'], {optional_attr1 => undef, attr2 => '2'}, 'my_key'));

    #or without attributes validation
    $xml->handler('node', custom_array_handler($result, undef, undef, 'my_key'));

    $xml->parse_string($xml_content);

    #transforms $result to ,{ my_key => [
        {name => 'key1', attr1 => '1', optional_attr1 => undef, attr2 => 2},
        {name => 'key2', attr1 => '2', optional_attr1 => undef, attr2 => 2}
        ]
    };
object_handler

Returns handler for transforming node into an object, Takes class name or constructor code reference, optionally array ref of the required attributes, hash_ref of the optional attributes, parent storage key to the hash item (by default the element name).

    my $xml_content = <<XML;
    <?xml version="1.0"?>
    <root>
        <object1 attr1="1" />
        <object1 attr1="2" />
    </root>
    XML

    my $xml = Simple::SAX::Serializer->new;

    $xml->handler('object1', hash_of_object_array_handler('Object1', ['attr1']));
    $xml->handler('root', root_object_handler('Root'));

    my $result = $xml->parse_string($xml_content);
    #transforms result to 
    Root->new(object1 => [Object1->new(attr1 => 1),Object1->new(attr1 => 2)]);

SEE ALSO ^

Simple::SAX::Serializer::Element

COPYRIGHT AND LICENSE ^

The Simple::SAX::Serializer::Handler module is free software. You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.

AUTHOR ^

Adrian Witas, adrian@webapp.strefa.pl

syntax highlighting: