Set

[Raku LibXML Project] / [LibXML Module] / Node :: Set

class LibXML::Node::Set

LibXML XPath Node Collections

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

Copyright

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

Raku bindings to the libxml2 native library

Authors

  • David Warring

License

Artistic-2.0

Dependencies

File::TempMethod::AlsoW3C::DOM:ver<0.0.2+>XML

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::HashMap::Maker
  • 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::XPath::Context
  • LibXML::XPath::Expression
  • LibXML::XPath::Object
  • LibXML::_CharacterData
  • LibXML::_DomNode
  • LibXML::_Options
  • LibXML::_ParentNode
  • LibXML::_Validator

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