Returns all child elements, in the correct order.
Returns all child elements, in the correct order. The faster this method is, the faster the other ParentElemLike
methods will be.
Note that this method is named "allChildElems" instead of "findAllChildElems". The latter name would be more consistent
with the rest of this API, but the chosen name illustrates that allChildElems
is seen more as "data" than as a "computation".
Returns all child elements with their ElemPath
entries, in the correct order.
Returns all child elements with their ElemPath
entries, in the correct order. This method should be very efficient.
The implementation must be such that the following holds: (allChildElemsWithPathEntries map (_._1)) == allChildElems
Returns the equivalent of findWithElemPath(ElemPath(immutable.IndexedSeq(entry)))
, but it should be very efficient.
Returns the equivalent of findWithElemPath(ElemPath(immutable.IndexedSeq(entry)))
, but it should be very efficient.
Indeed, it is function findWithElemPath
that is defined in terms of this function, findWithElemPathEntry
, and not
the other way around.
The attributes as a mapping from EName
s (instead of QName
s) to values.
Resolved name of the element, as EName
Shorthand for filterChildElems { _.localName == localName }
.
Shorthand for filterChildElems(expandedName)
.
Shorthand for filterChildElems(p)
.
Shorthand for filterChildElems(p)
. Use this shorthand only if the predicate is a short expression.
Shorthand for findAttribute(localName)
Shorthand for attributeOption(expandedName)
Shorthand for filterElemsOrSelf { _.localName == localName }
.
Shorthand for filterElemsOrSelf(expandedName)
.
Shorthand for filterElemsOrSelf(p)
.
Shorthand for filterElemsOrSelf(p)
. Use this shorthand only if the predicate is a short expression.
Shorthand for findTopmostElemsOrSelf { _.localName == localName }
.
Shorthand for findTopmostElemsOrSelf(expandedName)
.
Shorthand for findTopmostElemsOrSelf(p)
.
Shorthand for findTopmostElemsOrSelf(p)
. Use this shorthand only if the predicate is a short expression.
Returns the ElemPath
entries of all child elements, in the correct order.
Returns the ElemPath
entries of all child elements, in the correct order.
Equivalent to allChildElemsWithPathEntries map { _._2 }
.
Returns allChildElemsWithPathEntries map { case (e, pe) => ElemPath.from(pe) }
Returns allChildElemsWithPathEntries map { case (e, pe) => ElemPath.from(pe) }
Returns the value of the attribute with the given expanded name, and throws an exception otherwise
Returns the value of the attribute with the given expanded name, if any, wrapped in an Option
Returns allChildElems collect pf
Returns allChildElems collect pf
Returns (the equivalent of) findAllElems collect pf
Returns (the equivalent of) findAllElems collect pf
Returns (the equivalent of) findAllElemsOrSelf collect pf
Returns (the equivalent of) findAllElemsOrSelf collect pf
Returns the paths of child elements obeying the given predicate
Returns the paths of child elements obeying the given predicate
Returns the child elements with the given expanded name
Returns the child elements obeying the given predicate
Returns the child elements obeying the given predicate
Returns the paths of descendant-or-self elements that obey the given predicate.
Returns the paths of descendant-or-self elements that obey the given predicate.
That is, the result is equivalent to the paths of findAllElemsOrSelf filter p
.
Returns the paths of descendant elements obeying the given predicate, that is, the paths of findAllElems filter p
Returns the paths of descendant elements obeying the given predicate, that is, the paths of findAllElems filter p
Returns the descendant elements with the given expanded name
Returns the descendant elements obeying the given predicate, that is, findAllElems filter p
Returns the descendant elements obeying the given predicate, that is, findAllElems filter p
Returns the descendant-or-self elements that have the given expanded name
Returns the descendant-or-self elements that obey the given predicate.
Returns the descendant-or-self elements that obey the given predicate.
That is, the result is equivalent to findAllElemsOrSelf filter p
.
Returns the path of this element followed by the paths of all descendant elements (that is, the descendant-or-self elements)
Returns the path of this element followed by the paths of all descendant elements (that is, the descendant-or-self elements)
Returns the paths of all descendant elements (not including this element).
Returns the paths of all descendant elements (not including this element). Equivalent to findAllElemOrSelfPaths.drop(1)
Returns all descendant elements (not including this element).
Returns all descendant elements (not including this element). Equivalent to findAllElemsOrSelf.drop(1)
Returns this element followed by all descendant elements (that is, the descendant-or-self elements)
Returns this element followed by all descendant elements (that is, the descendant-or-self elements)
Returns the first found attribute value of an attribute with the given local name, if any, wrapped in an Option
.
Returns the first found child element with the given expanded name, if any, wrapped in an Option
Returns the first found child element obeying the given predicate, if any, wrapped in an Option
Returns the first found child element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found child element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found child element obeying the given predicate, if any, wrapped in an Option
Returns the first found (topmost) descendant element with the given expanded name, if any, wrapped in an Option
Returns the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option
Returns the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option
Returns the first found (topmost) descendant-or-self element with the given expanded name, if any, wrapped in an Option
Returns the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option
Returns the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option
Returns the path of the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option
Returns the paths of the descendant-or-self elements that obey the given predicate, such that no ancestor obeys the predicate.
Returns the paths of the descendant-or-self elements that obey the given predicate, such that no ancestor obeys the predicate.
Returns the paths of the descendant elements obeying the given predicate that have no ancestor obeying the predicate
Returns the paths of the descendant elements obeying the given predicate that have no ancestor obeying the predicate
Returns the descendant elements with the given expanded name that have no ancestor with the same name
Returns the descendant elements obeying the given predicate that have no ancestor obeying the predicate
Returns the descendant elements obeying the given predicate that have no ancestor obeying the predicate
Returns the descendant-or-self elements with the given expanded name that have no ancestor with the same name
Returns the descendant-or-self elements that obey the given predicate, such that no ancestor obeys the predicate.
Returns the descendant-or-self elements that obey the given predicate, such that no ancestor obeys the predicate.
Finds the element with the given ElemPath
(where this element is the root), if any, wrapped in an Option
.
Finds the element with the given ElemPath
(where this element is the root), if any, wrapped in an Option
.
This method must be very efficient, which depends on the efficiency of method findWithElemPathEntry
.
Returns the single child element with the given expanded name, and throws an exception otherwise
Returns the single child element obeying the given predicate, and throws an exception otherwise
Returns the single child element obeying the given predicate, and throws an exception otherwise
Returns the path of the single child element obeying the given predicate, and throws an exception otherwise
Returns the path of the single child element obeying the given predicate, and throws an exception otherwise
Computes an index on the given function taking an element, that is, returns findAllElemsOrSelf groupBy f
.
Computes an index on the given function taking an element, that is, returns findAllElemsOrSelf groupBy f
.
Returns (the equivalent of) findWithElemPath(path).get
Returns (the equivalent of) findWithElemPath(path).get
The local name (or local part).
API and implementation trait for elements as containers of elements, each having a name and possible attributes, as well as an "element path" from the root element. This trait extends trait ElemLike, adding knowledge about "element paths" of elements with respect to a root element.
Most users of the yaidom API do not use this trait directly, so may skip the documentation of this trait.
This trait to a large extent mirrors the
ParentElemLike
trait, with queries returning "element paths" instead of "elements". As mentioned above, this trait knows more about elements than its supertraits, because it knows about "element paths". Still, it knows only about element nodes, so other node types than elements are not known to this API.Based on its supertraits
ElemLike
andParentElemLike
, this trait offers a richElemPath
query API. Two additional abstract methods other than those required by the supertraits need to be implemented, viz.findWithElemPathEntry
andallChildElemsWithPathEntries
.This trait is extended by trait
UpdatableElemLike
, and therefore mixed in by Elem and Elem.Example usage:
The above example shows how we can use the results of queries for
ElemPath
s, if we are interested in the ancestors of the elements at those paths. Of course, using only theElemLike
API, this example could have been written simply as:Indeed, the query methods of the
ParentElemLike
API (orElemLike
API) should often be preferred to those of thisPathAwareElemLike
API. After all,ElemPath
s are relative to one specific root element, they are "volatile" (in that "functional updates" may render them useless), and they are rather slow indexes. Moreover, theParentElemLike
query methods tend to be faster than those of this trait.On the other hand, it is often the combination of
ParentElemLike
API query methods andPathAwareElemLike
API query methods that offer interesting querying possibilities. After all, sometimes it is handy to formulate a query in such a way that ancestors are retrieved in at least one of the intermediate steps.Another use for
ElemPath
queries is functional updates. See UpdatableElemLike for the "update" methods. Someupdated
methods take anElemPath
, and anotherupdated
method is implemented using anElemPath
query offered by this API.Note that this API does not offer any query methods using a predicate on
ElemPath
s instead of on elements. Such queries can always be rewritten to queries in which the Scala Collections APIfilter
method is used for filtering onElemPath
s.PathAwareElemLike more formally
Analogously to the
ParentElemLike
API, there are 3 core element path retrieval methods:allChildElemPaths
, returning the paths (relative to this element) of all child elementsfindAllElemPaths
, finding the paths (relative to this element) of all descendant elementsfindAllElemOrSelfPaths
, finding the paths (relative to this element) of all descendant elements or selfFor example, instead of:
we could write (more verbosely):
The second statement is far less efficient, due to repeated calls to method
getWithElemPath
. In this case, we could instead have written:Assuming correct implementations of the abstract methods, and using "resolved" (!) Elem instances (which have structural equality defined), this trait obeys some obvious properties, expressed using equality:
etc.
We offer no proofs of these properties.
Implementation notes
Like trait
ParentElemLike
, some query methods use recursion in their implementations, but no tail recursion. See ParentElemLike for a motivation.The captured element subtype