Прочитать на английском

Поделиться через


XPathNodeIterator.MoveNext Метод

Определение

При переопределении в производном классе перемещает объект XPathNavigator, возвращенный свойством Current, к следующему узлу в выбранном наборе узлов.

public abstract bool MoveNext ();

Возвращаемое значение

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);

В примере в качестве входных данных используется файл 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);
}

Другой способ — использовать foreach цикл для вызова GetEnumerator метода и использовать возвращенный IEnumerator интерфейс для перечисления узлов, как показано в следующем примере:

foreach (XPathNavigator n in nodeIterator)
    Console.WriteLine(n.LocalName);

Следует либо использовать MoveNext метод, либо Current использовать GetEnumerator этот метод. Объединение этих двух подходов может привести к непредвиденным результатам. Например, если MoveNext сначала вызывается метод, а затем GetEnumerator вызывается метод в foreach цикле, foreach цикл не начнет перечислять результаты из начала коллекции, а с позиции после Current метода.

Применяется к

См. также раздел