Set

Synopsis

use LibXML::Node::Set;
  my LibXML::Node::Set $node-set;
$node-set = $elem.childNodes;
  $node-set = $elem.findnodes($xpath, :$deref);
  $node-set = $elem{$xpath}
  $node-set .= new: $deref;
  $node-set.add: $elem;
my LibXML::Item @items = $node-set;
  for $node-set -> LibXML::Item $item { ... }
my LibXML::Node::Set %nodes-by-name = $node-set.Hash;
  # ...

Description

This class is commonly used for handling result sets from XPath queries or DOM navigation methods. It performs the Iterator role, which enables:

for $elem.findnodes($path) {...}
    my LibXML::Item @nodes = $elem.findnodes($xpath);

Methods

method new

method new(xmlNodeSet :$raw, Bool :$deref) returns LibXML::Node::Set
my xmlNodeSet $raw .= new; # create a new object from scratch
        #-OR-
        my xmlNodeSet $raw = $other-node-set.raw.copy; # take a copy
        my LibXML::Node::Set $nodes .= new: :$raw;
        $raw = Nil; # best to avoid any further direct access to the raw object

The `:deref` option dereferences elements to their constituant child nodes and attributes. For example:

my LibXML::Document $doc .= parse("example/dromeds.xml");
      # without dereferencing
      my LibXML::Node::Set $species = $doc.findnodes("dromedaries/species");
      say $species.keys; # (species)
      # with dereferencing
      $species = $doc.findnodes("dromedaries/species", :deref);
      #-OR-
      $species = $doc<dromedaries/species>; # The AT-KEY method sets the :deref option
      say $species.keys; # disposition text() humps @name)

`:deref` is used by the node AT-KEY and Hash methods.

method elems

method elems() returns UInt

Returns the number of nodes in the set.

method AT-POS

method AT-POS(UInt) returns LibXML::Item
for ^$node-set.elems {
            my $item = $node-set[$_]; # or: $node-set.AT-POS($_);
            ...
        }

Positional interface into the node-set

method AT-KEY

method AT-KEY(Str $expr) returns LibXML::Node::Set
        my LibXML::Node::Set $a-nodes = $node-set<a>;
        my LibXML::Node::Set $b-atts = $node-set<@b>;
        my LibXML::Text @text-nodes = $node-set<text()>;

This is an associative interface to node sub-sets grouped by element name, attribute name (`@name`), or by node type, e.g. `text()`, `comment()`, processing-instruction()`.

method add (alias push)

method add(LibXML::Item $node) returns LibXML::Item

Adds a node to the set.

method pop

method pop() returns LibXML::Item

Removes the last item from the set.

method delete

multi method delete(LibXML::Item $node) returns LibXML::Item
        multi method delete(UInt $pos) returns LibXML::Item

Deletes a given node from the set.

Note: this is O(n) and will be slower as node-set size increases.

method reverse

# process nodes in ascending order
        for $node.find('ancestor-or-self::*').reverse { ... }

Reverses the elements in the node-set

2001-2007, AxKit.com Ltd.

2002-2006, Christian Glahn.

2006-2009, Petr Pajas.

License

This program is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0 http://www.perlfoundation.org/artistic_license_2_0.

LibXML v0.11.3

Raku bindings to the libxml2 native library

Authors

  • David Warring

License

Artistic-2.0

Dependencies

Test Dependencies

Provides

  • LibXML
  • LibXML::Attr
  • LibXML::Attr::Map
  • LibXML::CDATA
  • LibXML::Comment
  • LibXML::Config
  • LibXML::Dict
  • LibXML::Document
  • LibXML::DocumentFragment
  • LibXML::Dtd
  • LibXML::Dtd::AttrDecl
  • LibXML::Dtd::ElementContent
  • LibXML::Dtd::ElementDecl
  • LibXML::Dtd::Entity
  • LibXML::Dtd::Notation
  • LibXML::Element
  • LibXML::EntityRef
  • LibXML::Enums
  • LibXML::ErrorHandling
  • LibXML::HashMap
  • LibXML::InputCallback
  • LibXML::Item
  • LibXML::Namespace
  • LibXML::Node
  • LibXML::Node::List
  • LibXML::Node::Set
  • LibXML::PI
  • LibXML::Parser
  • LibXML::Parser::Context
  • LibXML::Pattern
  • LibXML::PushParser
  • LibXML::Raw
  • LibXML::Raw::DOM::Attr
  • LibXML::Raw::DOM::Document
  • LibXML::Raw::DOM::Element
  • LibXML::Raw::DOM::Node
  • LibXML::Raw::Defs
  • LibXML::Raw::Dict
  • LibXML::Raw::HashTable
  • LibXML::Raw::RelaxNG
  • LibXML::Raw::Schema
  • LibXML::Raw::TextReader
  • LibXML::Reader
  • LibXML::RegExp
  • LibXML::RelaxNG
  • LibXML::SAX
  • LibXML::SAX::Builder
  • LibXML::SAX::Handler
  • LibXML::SAX::Handler::SAX2
  • LibXML::SAX::Handler::SAX2::Locator
  • LibXML::SAX::Handler::XML
  • LibXML::Schema
  • LibXML::Text
  • LibXML::Types
  • LibXML::Utils
  • LibXML::X
  • LibXML::XInclude::Context
  • LibXML::XPath::Context
  • LibXML::XPath::Expression
  • LibXML::XPath::Object
  • LibXML::_CharacterData
  • LibXML::_Collection
  • LibXML::_Configurable
  • LibXML::_DomNode
  • LibXML::_Options
  • LibXML::_ParentNode
  • LibXML::_Rawish
  • LibXML::_Validator

The Camelia image is copyright 2009 by Larry Wall. "Raku" is a trademark of the Yet Another Society. All rights reserved.

Built with Podlite β€” the markup and publishing tools behind this site.