XmlComment class
XML comment node.
class XmlComment extends XmlData { XmlComment(String data) : super(data); void writeTo(StringBuffer buffer) { buffer.write('<!--'); buffer.write(data); buffer.write('-->'); } }
Extends
IterableBase<XmlNode> > IterableBase__XmlWritable > XmlNode > XmlData > XmlComment
Properties
final List<XmlAttribute> attributes #
Answer the attribute nodes of the receiver.
List<XmlAttribute> get attributes => [];
final List<XmlNode> children #
Answer the child nodes of the receiver.
List<XmlNode> get children => [];
final XmlDocument document #
Answer the document that contains this node, or null
if the node is
not part of a document.
XmlDocument get document { return parent == null ? null : parent.document; }
final E first #
final XmlNode firstChild #
Answer the first child of the receiver or null
.
XmlNode get firstChild { return children.length > 0 ? children[0] : null; }
final bool isEmpty #
final Iterator<XmlNode> iterator #
Answer an iterator over the receiver, all attributes and nested children.
Iterator<XmlNode> get iterator { var nodes = new List(); _allAllNodesTo(nodes); return nodes.iterator; }
final E last #
final XmlNode lastChild #
Answer the last child of the receiver or null
.
XmlNode get lastChild { return children.length > 0 ? children[children.length - 1] : null; }
final int length #
final XmlNode nextSibling #
Answer the next sibling of the receiver or null
.
XmlNode get nextSibling { if (parent != null) { var siblings = parent.children; for (var i = 0; i < siblings.length - 1; i++) { if (siblings[i] == this) { return siblings[i + 1]; } } } return null; }
final XmlNode parent #
Answer the parent node of the receiver, or null
if there is none.
XmlNode get parent => _parent;
final XmlNode previousSibling #
Answer the previous sibling of the receiver or null
.
XmlNode get previousSibling { if (parent != null) { var siblings = parent.children; for (var i = 1; i < siblings.length; i++) { if (siblings[i] == this) { return siblings[i - 1]; } } } return null; }
final XmlNode root #
Answer the root of the subtree in which this node is found, whether that's a document or another element.
XmlNode get root { return parent == null ? this : parent.root; }
final E single #
Returns the single element in this
.
If this
is empty or has more than one element throws a StateError
.
E get single { Iterator it = iterator; if (!it.moveNext()) throw new StateError("No elements"); E result = it.current; if (it.moveNext()) throw new StateError("More than one element"); return result; }
Methods
bool any(bool f(E element)) #
bool contains(E element) #
E elementAt(int index) #
Returns the indexth element.
If [this] [Iterable] has fewer than
index elements throws a
RangeError
.
Note: if this
does not have a deterministic iteration order then the
function may simply return any element without any iteration if there are
at least
index elements in this
.
E elementAt(int index) { if (index is! int || index < 0) throw new RangeError.value(index); int remaining = index; for (E element in this) { if (remaining == 0) return element; remaining--; } throw new RangeError.value(index); }
bool every(bool f(E element)) #
Iterable expand(Iterable f(E element)) #
Expand each element of this Iterable
into zero or more elements.
The resulting Iterable will run through the elements returned by f for each element of this, in order.
The returned Iterable
is lazy, and will call
f for each element
of this every time it's iterated.
Iterable expand(Iterable f(E element)) => new ExpandIterable<E, dynamic>(this, f);
E firstWhere(bool test(E value), {E orElse()}) #
Returns the first element that satisfies the given predicate f
.
If none matches, the result of invoking the
orElse function is
returned. By default, when
orElse is null
, a StateError
is
thrown.
E firstWhere(bool test(E value), { E orElse() }) { // TODO(floitsch): check that arguments are of correct type? for (E element in this) { if (test(element)) return element; } if (orElse != null) return orElse(); throw new StateError("No matching element"); }
dynamic fold(initialValue, combine(previousValue, E element)) #
Reduces a collection to a single value by iteratively combining each element of the collection with an existing value using the provided function.
Use initialValue as the initial value, and the function combine to create a new value from the previous one and an element.
Example of calculating the sum of an iterable:
iterable.fold(0, (prev, element) => prev + element);
dynamic fold(var initialValue, dynamic combine(var previousValue, E element)) { var value = initialValue; for (E element in this) value = combine(value, element); return value; }
void forEach(void f(E element)) #
String join([String separator]) #
Converts each element to a String
and concatenates the strings.
Converts each element to a String
by calling Object.toString
on it.
Then concatenates the strings, optionally separated by the
separator
string.
String join([String separator]) { Iterator<E> iterator = this.iterator; if (!iterator.moveNext()) return ""; StringBuffer buffer = new StringBuffer(); if (separator == null || separator == "") { do { buffer.write("${iterator.current}"); } while (iterator.moveNext()); } else { buffer.write("${iterator.current}"); while (iterator.moveNext()) { buffer.write(separator); buffer.write("${iterator.current}"); } } return buffer.toString(); }
E lastWhere(bool test(E value), {E orElse()}) #
Returns the last element that satisfies the given predicate f
.
If none matches, the result of invoking the
orElse function is
returned. By default, when
orElse is null
, a StateError
is
thrown.
E lastWhere(bool test(E value), {E orElse()}) { // TODO(floitsch): check that arguments are of correct type? E result = null; bool foundMatching = false; for (E element in this) { if (test(element)) { result = element; foundMatching = true; } } if (foundMatching) return result; if (orElse != null) return orElse(); throw new StateError("No matching element"); }
Iterable map(f(E element)) #
Returns a lazy Iterable
where each element e
of this
is replaced
by the result of f(e)
.
This method returns a view of the mapped elements. As long as the
returned Iterable
is not iterated over, the supplied function
f will
not be invoked. The transformed elements will not be cached. Iterating
multiple times over the the returned Iterable
will invoke the supplied
function
f multiple times on the same element.
Iterable map(f(E element)) => new MappedIterable<E, dynamic>(this, f);
E reduce(E combine(E value, E element)) #
Reduces a collection to a single value by iteratively combining elements of the collection using the provided function.
Example of calculating the sum of an iterable:
iterable.reduce((value, element) => value + element);
E reduce(E combine(E value, E element)) { Iterator<E> iterator = this.iterator; if (!iterator.moveNext()) { throw new StateError("No elements"); } E value = iterator.current; while (iterator.moveNext()) { value = combine(value, iterator.current); } return value; }
E singleWhere(bool test(E value)) #
Returns the single element that satisfies f
. If no or more than one
element match then a StateError
is thrown.
E singleWhere(bool test(E value)) { // TODO(floitsch): check that argument is of correct type? E result = null; bool foundMatching = false; for (E element in this) { if (test(element)) { if (foundMatching) { throw new StateError("More than one matching element"); } result = element; foundMatching = true; } } if (foundMatching) return result; throw new StateError("No matching element"); }
Iterable<E> skip(int n) #
Iterable<E> skipWhile(bool test(E value)) #
Returns an Iterable
that skips elements while
test is satisfied.
The filtering happens lazily. Every new Iterator
of the returned
Iterable
will iterate over all elements of this
.
As long as the iterator's elements do not satisfy
test they are
discarded. Once an element satisfies the
test the iterator stops testing
and uses every element unconditionally.
Iterable<E> skipWhile(bool test(E value)) { return new SkipWhileIterable<E>(this, test); }
Iterable<E> take(int n) #
Iterable<E> takeWhile(bool test(E value)) #
Returns an Iterable
that stops once
test is not satisfied anymore.
The filtering happens lazily. Every new Iterator
of the returned
Iterable
will start iterating over the elements of this
.
When the iterator encounters an element e
that does not satisfy
test,
it discards e
and moves into the finished state. That is, it will not
ask or provide any more elements.
Iterable<E> takeWhile(bool test(E value)) { return new TakeWhileIterable<E>(this, test); }
List<E> toList({bool growable: true}) #
Set<E> toSet() #
String toString() #
Answer a print string of the receiver.
String toString() { var buffer = new StringBuffer(); writeTo(buffer); return buffer.toString(); }
Iterable<E> where(bool f(E element)) #
Returns a lazy Iterable
with all elements that satisfy the
predicate
f.
This method returns a view of the mapped elements. As long as the
returned Iterable
is not iterated over, the supplied function
f will
not be invoked. Iterating will not cache results, and thus iterating
multiple times over the the returned Iterable
will invoke the supplied
function
f multiple times on the same element.
Iterable<E> where(bool f(E element)) => new WhereIterable<E>(this, f);
void writeTo(StringBuffer buffer) #
Writes the XML string of the receiver to a {@code buffer}.
void writeTo(StringBuffer buffer) { buffer.write('<!--'); buffer.write(data); buffer.write('-->'); }