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 = 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 классом, не расположен на первом узле в выбранном наборе узлов. Вызов MoveNext метода XPathNodeIterator класса необходимо сделать, чтобы разместить XPathNodeIterator объект на первом узле в выбранном наборе узлов.
При использовании XPathNodeIterator, если изменить текущий узел или любой из его предков, ваша текущая позиция теряется. Если вы хотите изменить количество выбранных узлов, создайте XPathNavigator массив, скопируйте все узлы из XPathNodeIterator массива, а затем выполните итерацию по массиву и измените узлы.
Существует два способа итерации по 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
Следует использовать или Current использовать MoveNextGetEnumerator. Объединение этих двух подходов может привести к непредвиденным результатам. Например, если 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() |
Создает новый объект, который является копией текущего экземпляра. |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |