---
name: "AnyEvent::XMPP::Node"
section: "3pm"
platform: "linux"
package: "perl-anyevent-xmpp"
version: "0.55-7"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/AnyEvent::XMPP::Node"
---

# AnyEvent::XMPP::Node(3pm)

XML node tree helper for the parser.

## NAME

AnyEvent::XMPP::Node - XML node tree helper for the parser.

## SYNOPSIS

```
   use AnyEvent::XMPP::Node;
   ...
```

## DESCRIPTION

This class represens a XML node. AnyEvent::XMPP should usually not require messing with the parse tree, but sometimes it is neccessary.

If you experience any need for messing with these and feel AnyEvent::XMPP should rather take care of it drop me a mail, feature request or most preferably a patch!

Every AnyEvent::XMPP::Node has a namespace, attributes, text and child nodes.

You can access these with the following methods:

## METHODS

- **new ($ns, $el, $attrs, $parser)**

  Creates a new AnyEvent::XMPP::Node object with the node tag name `$el` in the namespace URI `$ns` and the attributes `$attrs`. The `$parser` must be the instance of `"AnyEvent::XMPP::Parser"` which generated this node.

- **name**

  The tag name of this node.

- **namespace**

  Returns the namespace URI of this node.

- **eq ($namespace\_or\_alias, $name) or eq ($node)**

  Returns true whether the current element matches the tag name `$name` in the namespaces pointed at by `$namespace_or_alias`.

  You can either pass an alias that was defined in AnyEvent::XMPP::Namespaces or pass an namespace URI in `$namespace_or_alias`. If no alias with the name `$namespace_or_alias` was found in AnyEvent::XMPP::Namespaces it will be interpreted as namespace URI.

  The first argument to eq can also be another AnyEvent::XMPP::Node instance.

- **eq\_ns ($namespace\_or\_alias) or eq\_ns ($node)**

  This method return true if the namespace of this instance of AnyEvent::XMPP::Node matches the namespace described by `$namespace_or_alias` or the namespace of the `$node` which has to be another AnyEvent::XMPP::Node instance.

  See `"eq"` for the meaning of `$namespace_or_alias`.

- **attr ($name)**

  Returns the contents of the `$name` attribute.

- **add\_node ($node)**

  Adds a sub-node to the current node.

- **nodes**

  Returns a list of sub nodes.

- **add\_text ($string)**

  Adds character data to the current node.

- **text**

  Returns the text for this node.

- **find\_all (@path)**

  This method does a recursive descent through the sub-nodes and fetches all nodes that match the last element of `@path`.

  The elements of `@path` consist of a array reference to an array with two elements: the namespace key known by the `$parser` and the tagname we search for.

- **write\_on ($writer)**

  This writes the current node out to the AnyEvent::XMPP::Writer object in `$writer`.

- **as\_string ()**

  This method returns the original character representation of this XML element (and it's children nodes). Please note that the string is a unicode string, meaning: to get octets use:

  ```
     my $octets = encode ('UTF-8', $node->as_string);
  ```

  Now you can roll stunts like this:

  ```
     my $libxml = XML::LibXML->new;
     my $doc    = $libxml->parse_string (encode ('UTF-8', $node->as_string ()));
  ```

  (You can use your favorite XML parser :)

- **append\_raw ($string)**

  This method is called by the parser to store original strings of this element.

- **to\_sax\_events ($handler)**

  This method takes anything that can receive SAX events. See also XML::GDOME::SAX::Builder or XML::Handler::BuildDOM or XML::LibXML::SAX::Builder.

  With this you can convert this node to any DOM level 2 structure you want:

  ```
     my $builder = XML::LibXML::SAX::Builder->new;
     $node->to_sax_events ($builder);
     my $dom = $builder->result;
     print "Canonized: " . $dom->toStringC14N . "\n";
  ```

## AUTHOR

Robin Redeker, `"<elmex at ta-sa.org>"`, JID: `"<elmex at jabber.org>"`

## COPYRIGHT & LICENSE

Copyright 2007, 2008 Robin Redeker, all rights reserved.

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