XPathNodeIterator.MoveNext Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе перемещает XPathNavigator объект, возвращаемый Current свойством, на следующий узел в выбранном наборе узлов.
public:
abstract bool MoveNext();
public abstract bool MoveNext();
abstract member MoveNext : unit -> bool
Public MustOverride Function MoveNext () As Boolean
Возвращаемое значение
true Значение , XPathNavigator если объект перемещен на следующий узел; false если больше выбранных узлов нет.
Примеры
В следующем примере метод XPathNavigator класса используется Select для выбора набора узлов с помощью XPathNodeIterator класса.
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathNodeIterator nodes = navigator.Select("/bookstore/book");
nodes.MoveNext();
XPathNavigator nodesNavigator = nodes.Current;
XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);
while (nodesText.MoveNext())
Console.WriteLine(nodesText.Current.Value);
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim nodes As XPathNodeIterator = navigator.Select("/bookstore/book")
nodes.MoveNext()
Dim nodesNavigator As XPathNavigator = nodes.Current
Dim nodesText As XPathNodeIterator = nodesNavigator.SelectDescendants(XPathNodeType.Text, False)
While nodesText.MoveNext()
Console.WriteLine(nodesText.Current.Value)
End While
Пример принимает файл books.xml в качестве входных данных.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Комментарии
Объект XPathNodeIterator размещается на первом узле в выбранном наборе узлов только после первоначального MoveNext вызова метода. Набор узлов создается в порядке документа. Поэтому вызов метода перемещается к следующему MoveNext узлу в порядке документа.
Существует два способа итерации по XPathNavigator коллекции с помощью XPathNodeIterator класса.
Одним из способов MoveNext является использование метода, а затем вызов Current для получения текущего XPathNavigator экземпляра, как показано в следующем примере:
while (nodeIterator.MoveNext())
{
XPathNavigator n = nodeIterator.Current;
Console.WriteLine(n.LocalName);
}
While nodeIterator.MoveNext()
Dim n As XPathNavigator = nodeIterator.Current
Console.WriteLine(n.LocalName)
End While
Другим способом foreach является использование цикла для вызова GetEnumerator метода и использования возвращаемого IEnumerator интерфейса для перечисления узлов, как показано в следующем примере:
foreach (XPathNavigator n in nodeIterator)
Console.WriteLine(n.LocalName);
For Each n As XPathNavigator In nodeIterator
Console.WriteLine(nav.LocalName)
Next
Метод следует использовать MoveNext или Current использовать этот GetEnumerator метод. Объединение этих двух подходов может привести к непредвиденным результатам. Например, если MoveNext метод вызывается сначала, а затем GetEnumerator вызывается метод в foreach цикле, foreach цикл не начнет перечислять результаты из начала коллекции, а от позиции после Current метода.