Appends a given relative ElemPath
to this ElemPath
Returns the ancestor-or-self paths, starting with this path, then the parent (if any), and ending with the root path
Returns the ancestor paths, starting with the parent path (if any), and ending with the root path
Appends a given Entry
to this ElemPath
Convenience method returning true if at least one entry has the given element name
Returns the element name (as EName) of the last path entry, if any, wrapped in an Option
Convenience method returning true if the last entry (if any) has the given element name
Returns ancestorOrSelfPaths find { path => p(path) }
Returns ancestorPaths find { path => p(path) }
Returns the first entry, if any, and throws an exception otherwise
Returns the first entry, if any, wrapped in an Option
Returns true if this is the root ElemPath
, so if it has no entries
Returns the last entry, if any, and throws an exception otherwise
Returns the last entry, if any, wrapped in an Option
Like parentPathOption
, but unwrapping the result (or throwing an exception otherwise)
Gets the parent path (if any, because the root path has no parent) wrapped in an Option
.
Gets the parent path (if any, because the root path has no parent) wrapped in an Option
.
This method shows much of the reason why class ElemPath
exists. If we know an element's ElemPath
, and therefore its
parent ElemPath
(using this method), then we can obtain the parent element by following the parent path from the
root of the tree.
Prepends a given Entry
to this ElemPath
Convenience method returning true if the first entry (if any) has the given element name
Given an invertible Scope
, returns the corresponding canonical XPath, but modified for the root element (which is unknown in the ElemPath
).
Given an invertible Scope
, returns the corresponding canonical XPath, but modified for the root element (which is unknown in the ElemPath
).
The modification is that the root element is written as a slash followed by an asterisk.
See http://ns.inria.org/active-tags/glossary/glossary.html#canonical-path.
Like withoutFirstEntryOption
, but unwrapping the result (or throwing an exception otherwise)
Returns the ElemPath
with the first path entry (if any) removed, wrapped in an Option
.
Unique identification of a descendant (or self)
Elem
given a rootElem
. It represents a unique path to an element, given a root element, independent of other types of nodes, as if the XML tree only consists of elements.For example, consider the following XML:
Then the last name of the first author of the Scala book (viz. Odersky) has the following element path:
or:
ElemPath
instances are useful in certain queries (see PathAwareElemLike), and in "functional updates" (see UpdatableElemLike).An ElemPath corresponds to one and only one canonical path of the element (modulo prefix names), which is the corresponding (canonical) XPath expression. See http://ns.inria.org/active-tags/glossary/glossary.html#canonical-path. There is one catch, though. The
ElemPath
does not know the root element name, so that is not a part of the corresponding canonical XPath expression. See the documentation of methodtoCanonicalXPath
.The
ElemPath
contains anIndexedSeq
of path entries for a specific child element, grandchild element etc., but the (root) element itself is referred to by an empty list of path entries.As an alternative to class
ElemPath
, each element in a tree could be uniquely identified by "path entries" that only contained a child index instead of an element name plus element child index (of element children with the given name). Yet that would be far less easy to use. HenceElemPath.Entry
instances each contain an element name plus index.Warning: indexing using ElemPaths can be slow, especially in large XML trees. Hence, it is advisable to use class
ElemPath
wisely in queries and "functional updates". Most queries for elements can be written without them (using the methods in traitParentElemLike
, instead of those added by subtraitPathAwareElemLike
).