---
name: "POE::Filter::XML::Node"
section: "3pm"
platform: "linux"
package: "libpoe-filter-xml-perl"
version: "1.140700-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/POE::Filter::XML::Node"
---

# POE::Filter::XML::Node(3pm)

A XML::LibXML::Element subclass that adds streaming semantics

## NAME

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

## VERSION

version 1.140700

## 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>
```

## 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.

## 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

### override cloneNode

```
    (Bool $deep)
```

cloneNode is overridden to carry forward the stream\_\[end\|start\] attributes

### override toString

```
    (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.

## AUTHOR

Nicholas R. Perez \<nperez@cpan.org\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Nicholas R. Perez \<nperez@cpan.org\>.

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