XPathNodeIterator Класс

Определение

Предоставляет итератор по выбранному набору узлов.

public ref class XPathNodeIterator abstract : ICloneable, System::Collections::IEnumerable
public ref class XPathNodeIterator abstract : System::Collections::IEnumerable
public ref class XPathNodeIterator abstract : ICloneable
public abstract class XPathNodeIterator : ICloneable, System.Collections.IEnumerable
public abstract class XPathNodeIterator : System.Collections.IEnumerable
public abstract class XPathNodeIterator : ICloneable
type XPathNodeIterator = class
    interface IEnumerable
    interface ICloneable
type XPathNodeIterator = class
    interface IEnumerable
type XPathNodeIterator = class
    interface ICloneable
type XPathNodeIterator = class
    interface ICloneable
    interface IEnumerable
Public MustInherit Class XPathNodeIterator
Implements ICloneable, IEnumerable
Public MustInherit Class XPathNodeIterator
Implements IEnumerable
Public MustInherit Class XPathNodeIterator
Implements ICloneable
Наследование
XPathNodeIterator
Реализации

Примеры

В следующем примере метод XPathNavigator класса используется Select для выбора набора узлов с помощью XPathNodeIterator класса.

XPathDocument^ document = gcnew 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);
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 , XPathNavigator возвращаемый классом, не расположен на первом узле в выбранном наборе узлов. Для размещения XPathNodeIterator объекта на первом узле в выбранном наборе узлов необходимо выполнить вызов MoveNext метода XPathNodeIterator класса.

Если вы изменяете XPathNodeIteratorтекущий узел или любой из его предков, текущая позиция теряется. Если вы хотите изменить количество выбранных узлов, создайте XPathNavigator массив, скопируйте все узлы из XPathNodeIterator массива, а затем выполните итерацию по массиву и измените узлы.

Существует два способа перебора XPathNavigator коллекции с помощью XPathNodeIterator класса.

Один из способов — использовать MoveNext метод, а затем вызвать Current для получения текущего XPathNavigator экземпляра, как показано в следующем примере:

while (nodeIterator->MoveNext())
{
    XPathNavigator^ n = nodeIterator->Current;
Console::WriteLine(n->LocalName);
}
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 интерфейс для перечисления узлов, как показано в следующем примере:

for each (XPathNavigator^ n in nodeIterator)
Console::WriteLine(n->LocalName);
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 метода.

Примечания для тех, кто реализует этот метод

При наследовании от XPathNodeIterator класса необходимо переопределить следующие члены:

Конструкторы

XPathNodeIterator()

Инициализирует новый экземпляр класса XPathNodeIterator.

Свойства

Count

Получает индекс последнего узла в выбранном наборе узлов.

Current

При переопределении в производном классе получает XPathNavigator для этого объекта XPathNodeIterator, размещенного в контексте текущего узла.

CurrentPosition

При переопределении в производном классе получает индекс текущей позиции в выбранном наборе узлов.

Методы

Clone()

При переопределении в производном классе возвращает клон объекта XPathNodeIterator.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEnumerator()

Возвращает объект IEnumerator для итерации по выбранному набору узлов.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MoveNext()

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

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

ICloneable.Clone()

Создает новый объект, являющийся копией текущего экземпляра.

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

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