Struct roxmltree::Node

source ·
pub struct Node<'a, 'input: 'a> { /* private fields */ }
Expand description

A node in a document.

§Document Order

The implementation of the Ord traits for Node is based on the concept of document-order. In layman’s terms, document-order is the order in which one would see each element if one opened a document in a text editor or web browser and scrolled down. Document-order convention is followed in XPath, CSS Counters, and DOM selectors API to ensure consistent results from selection. One difference in roxmltree is that there is the notion of more than one document in existence at a time. While Nodes within the same document are in document-order, Nodes in different documents will be grouped together, but not in any particular order.

As an example, if we have a Document a with Nodes [a0, a1, a2] and a Document b with Nodes [b0, b1], these Nodes in order could be either [a0, a1, a2, b0, b1] or [b0, b1, a0, a1, a2] and roxmltree makes no guarantee which it will be.

Document-order is defined here in the W3C XPath Recommendation The use of document-order in DOM Selectors is described here in the W3C Selectors API Level 1

Implementations§

source§

impl<'a, 'input: 'a> Node<'a, 'input>

source

pub fn node_type(&self) -> NodeType

Returns node’s type.

source

pub fn is_root(&self) -> bool

Checks that node is a root node.

source

pub fn is_element(&self) -> bool

Checks that node is an element node.

source

pub fn is_pi(&self) -> bool

Checks that node is a processing instruction node.

source

pub fn is_comment(&self) -> bool

Checks that node is a comment node.

source

pub fn is_text(&self) -> bool

Checks that node is a text node.

source

pub fn document(&self) -> &'a Document<'input>

Returns node’s document.

source

pub fn tag_name(&self) -> ExpandedName<'a, 'input>

Returns node’s tag name.

Returns an empty name with no namespace if the current node is not an element.

§Examples
let doc = roxmltree::Document::parse("<e xmlns='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().tag_name().namespace(), Some("http://www.w3.org"));
assert_eq!(doc.root_element().tag_name().name(), "e");
source

pub fn has_tag_name<'n, 'm, N>(&self, name: N) -> bool
where N: Into<ExpandedName<'n, 'm>>,

Checks that node has a specified tag name.

§Examples
let doc = roxmltree::Document::parse("<e xmlns='http://www.w3.org'/>").unwrap();

assert!(doc.root_element().has_tag_name("e"));
assert!(doc.root_element().has_tag_name(("http://www.w3.org", "e")));

assert!(!doc.root_element().has_tag_name("b"));
assert!(!doc.root_element().has_tag_name(("http://www.w4.org", "e")));
source

pub fn default_namespace(&self) -> Option<&'a str>

Returns node’s default namespace URI.

§Examples
let doc = roxmltree::Document::parse("<e xmlns='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().default_namespace(), Some("http://www.w3.org"));
let doc = roxmltree::Document::parse("<e xmlns:n='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().default_namespace(), None);
source

pub fn lookup_prefix(&self, uri: &str) -> Option<&'input str>

Returns a prefix for a given namespace URI.

§Examples
let doc = roxmltree::Document::parse("<e xmlns:n='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().lookup_prefix("http://www.w3.org"), Some("n"));
let doc = roxmltree::Document::parse("<e xmlns:n=''/>").unwrap();

assert_eq!(doc.root_element().lookup_prefix(""), Some("n"));
source

pub fn lookup_namespace_uri(&self, prefix: Option<&str>) -> Option<&'a str>

Returns an URI for a given prefix.

§Examples
let doc = roxmltree::Document::parse("<e xmlns:n='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().lookup_namespace_uri(Some("n")), Some("http://www.w3.org"));
let doc = roxmltree::Document::parse("<e xmlns='http://www.w3.org'/>").unwrap();

assert_eq!(doc.root_element().lookup_namespace_uri(None), Some("http://www.w3.org"));
source

pub fn attribute<'n, 'm, N>(&self, name: N) -> Option<&'a str>
where N: Into<ExpandedName<'n, 'm>>,

Returns element’s attribute value.

§Examples
let doc = roxmltree::Document::parse("<e a='b'/>").unwrap();

assert_eq!(doc.root_element().attribute("a"), Some("b"));
let doc = roxmltree::Document::parse(
    "<e xmlns:n='http://www.w3.org' a='b' n:a='c'/>"
).unwrap();

assert_eq!(doc.root_element().attribute("a"), Some("b"));
assert_eq!(doc.root_element().attribute(("http://www.w3.org", "a")), Some("c"));
source

pub fn attribute_node<'n, 'm, N>( &self, name: N, ) -> Option<Attribute<'a, 'input>>
where N: Into<ExpandedName<'n, 'm>>,

Returns element’s attribute object.

The same as attribute(), but returns the Attribute itself instead of a value string.

source

pub fn has_attribute<'n, 'm, N>(&self, name: N) -> bool
where N: Into<ExpandedName<'n, 'm>>,

Checks that element has a specified attribute.

§Examples
let doc = roxmltree::Document::parse(
    "<e xmlns:n='http://www.w3.org' a='b' n:a='c'/>"
).unwrap();

assert!(doc.root_element().has_attribute("a"));
assert!(doc.root_element().has_attribute(("http://www.w3.org", "a")));

assert!(!doc.root_element().has_attribute("b"));
assert!(!doc.root_element().has_attribute(("http://www.w4.org", "a")));
source

pub fn attributes(&self) -> Attributes<'a, 'input>

Returns element’s attributes.

§Examples
let doc = roxmltree::Document::parse(
    "<e xmlns:n='http://www.w3.org' a='b' n:a='c'/>"
).unwrap();

assert_eq!(doc.root_element().attributes().len(), 2);
source

pub fn namespaces(&self) -> NamespaceIter<'a, 'input>

Returns element’s namespaces.

§Examples
let doc = roxmltree::Document::parse(
    "<e xmlns:n='http://www.w3.org'/>"
).unwrap();

assert_eq!(doc.root_element().namespaces().len(), 1);
source

pub fn text(&self) -> Option<&'a str>

Returns node’s text.

  • for an element will return a first text child
  • for a comment will return a self text
  • for a text node will return a self text
§Examples
let doc = roxmltree::Document::parse("\
<p>
    text
</p>
").unwrap();

assert_eq!(doc.root_element().text(),
           Some("\n    text\n"));
assert_eq!(doc.root_element().first_child().unwrap().text(),
           Some("\n    text\n"));
let doc = roxmltree::Document::parse("<!-- comment --><e/>").unwrap();

assert_eq!(doc.root().first_child().unwrap().text(), Some(" comment "));
source

pub fn text_storage(&self) -> Option<&'a StringStorage<'input>>

Returns node’s text storage.

Useful when you need a more low-level access to an allocated string.

source

pub fn tail(&self) -> Option<&'a str>

Returns element’s tail text.

§Examples
let doc = roxmltree::Document::parse("\
<root>
    text1
    <p/>
    text2
</root>
").unwrap();

let p = doc.descendants().find(|n| n.has_tag_name("p")).unwrap();
assert_eq!(p.tail(), Some("\n    text2\n"));
source

pub fn tail_storage(&self) -> Option<&'a StringStorage<'input>>

Returns element’s tail text storage.

Useful when you need a more low-level access to an allocated string.

source

pub fn pi(&self) -> Option<PI<'input>>

Returns node as Processing Instruction.

source

pub fn parent(&self) -> Option<Self>

Returns the parent of this node.

source

pub fn parent_element(&self) -> Option<Self>

Returns the parent element of this node.

source

pub fn prev_sibling(&self) -> Option<Self>

Returns the previous sibling of this node.

source

pub fn prev_sibling_element(&self) -> Option<Self>

Returns the previous sibling element of this node.

source

pub fn next_sibling(&self) -> Option<Self>

Returns the next sibling of this node.

source

pub fn next_sibling_element(&self) -> Option<Self>

Returns the next sibling element of this node.

source

pub fn first_child(&self) -> Option<Self>

Returns the first child of this node.

source

pub fn first_element_child(&self) -> Option<Self>

Returns the first element child of this node.

source

pub fn last_child(&self) -> Option<Self>

Returns the last child of this node.

source

pub fn last_element_child(&self) -> Option<Self>

Returns the last element child of this node.

source

pub fn has_siblings(&self) -> bool

Returns true if this node has siblings.

source

pub fn has_children(&self) -> bool

Returns true if this node has children.

source

pub fn ancestors(&self) -> AxisIter<'a, 'input>

Returns an iterator over ancestor nodes starting at this node.

source

pub fn prev_siblings(&self) -> AxisIter<'a, 'input>

Returns an iterator over previous sibling nodes starting at this node.

source

pub fn next_siblings(&self) -> AxisIter<'a, 'input>

Returns an iterator over next sibling nodes starting at this node.

source

pub fn first_children(&self) -> AxisIter<'a, 'input>

Returns an iterator over first children nodes starting at this node.

source

pub fn last_children(&self) -> AxisIter<'a, 'input>

Returns an iterator over last children nodes starting at this node.

source

pub fn children(&self) -> Children<'a, 'input>

Returns an iterator over children nodes.

source

pub fn descendants(&self) -> Descendants<'a, 'input>

Returns an iterator over this node and its descendants.

source

pub fn range(&self) -> Range<usize>

Returns node’s range in bytes in the original document.

source

pub fn id(&self) -> NodeId

Returns node’s NodeId

Trait Implementations§

source§

impl<'a, 'input: 'a> Clone for Node<'a, 'input>

source§

fn clone(&self) -> Node<'a, 'input>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, 'input: 'a> Debug for Node<'a, 'input>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Hash for Node<'_, '_>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Node<'_, '_>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Node<'_, '_>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Node<'_, '_>

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<'a, 'input: 'a> Copy for Node<'a, 'input>

source§

impl Eq for Node<'_, '_>

Auto Trait Implementations§

§

impl<'a, 'input> Freeze for Node<'a, 'input>

§

impl<'a, 'input> RefUnwindSafe for Node<'a, 'input>

§

impl<'a, 'input> Send for Node<'a, 'input>

§

impl<'a, 'input> Sync for Node<'a, 'input>

§

impl<'a, 'input> Unpin for Node<'a, 'input>

§

impl<'a, 'input> UnwindSafe for Node<'a, 'input>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.