logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

POE::Filter::XML::Node - A XML::LibXML::Element subclass that adds streaming semantics

Author

       Nicholas R. Perez <nperez@cpan.org>

Description

       POE::Filter::XML::Node is a XML::LibXML::Element subclass that aims to provide a few extra convenience
       methods and light integration into a streaming context.

       This module can be used to create arbitrarily complex XML data structures that know how to stringify
       themselves.

Name

       POE::Filter::XML::Node - A XML::LibXML::Element subclass that adds streaming semantics

Public_Attributes

stream_[start|end]
           is: ro, isa: Bool, default: false

       These two attributes define behaviors to toString() for the node. In the case of stream_start, this means
       dropping all children and merely leaving the tag unterminated (eg. <start>). For stream_end, it will drop
       any children and treat the tag like a terminator (eg. </end>).

       Each attribute has a private writer ('_set_stream_[start|end]') if it necessary to manipulate these
       attributes post construction.

Public_Methods

overridecloneNode
           (Bool $deep)

       cloneNode is overridden to carry forward the stream_[end|start] attributes

   overridetoString
           (Bool $formatted)

       toString was overridden to provide special stringification semantics for when stream_start or stream_end
       are boolean true.

   setAttributes
           (ArrayRef $array_of_tuples)

       setAttributes() accepts a single argument: an array reference. Basically you pair up all the attributes
       you want to be into the node (ie. [attrib, value]) and this method will process them using
       setAttribute(). This is just a convenience method.

       If one of the attributes is 'xmlns', setNamespace() will be called with the value used as the $nsURI
       argument, with no prefix, and not activated.

        eg.
        ['xmlns', 'http://foo']
               |
               V
        setNamespace($value, '', 0)
               |
               V
        <node xmlns="http://foo"/>

   getAttributes
           returns (HashRef)

       This method returns all of the attribute nodes on the Element (filtering out namespace declarations) as a
       HashRef.

   getFirstChildByTagName(Str$name)
           returns (Maybe[POE::Filter::XML::Node])

       This is a convenience method that basically does:
        (getChildrenByTagName($name))[0]

   getChildrenHash
           returns (HashRef)

       getChildrenHash() returns a hash reference to all the children of that node.  Each key in the hash will
       be node name, and each value will be an array reference with all of the children with that name.

Synopsis

           use POE::Filter::XML::Node;

           my $node = POE::Filter::XML::Node->new('iq');

           $node->setAttributes(
               ['to', 'foo@other',
               'from', 'bar@other',
               'type', 'get']
           );

           my $query = $node->addNewChild('jabber:iq:foo', 'query');

           $query->appendTextChild('foo_tag', 'bar');

           say $node->toString();

           --

           (newlines and tabs for example only)

           <iq to='foo@other' from='bar@other' type='get'>
               <query xmlns='jabber:iq:foo'>
                   <foo_tag>bar</foo_tag>
               </query>
           </iq>

Version

       version 1.140700

See Also