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
实现

示例

以下示例使用 Select 类的 XPathNavigator 方法选择使用 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的对象未定位在所选节点集中的第一个节点上。 必须调用 MoveNext 类的 XPathNodeIterator 方法,才能将 XPathNodeIterator 对象定位在所选节点集中的第一个节点上。

使用 时, XPathNodeIterator如果编辑当前节点或其任何上级,则当前位置将丢失。 如果要编辑已选择的节点数,请创建一个 XPathNavigator 数组,将所有节点从 XPathNodeIterator 复制到数组中,然后循环访问该数组并修改节点。

XPathNodeIterator两种方法可以使用 类循环访问XPathNavigator集合。

一种方法是使用 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

应使用 MoveNextCurrent 或使用 GetEnumerator。 结合使用这两种方法可能会导致意外结果。 例如,如果 MoveNext 先调用 方法,然后在 GetEnumerator 循环中 foreach 调用 该方法,则 foreach 循环不会从集合的开头开始枚举结果,而是从方法后 Current 的位置开始枚举结果。

实施者说明

XPathNodeIterator 类继承时,必须重写以下成员:

构造函数

XPathNodeIterator()

初始化 XPathNodeIterator 类的新实例。

属性

Count

获取所选节点集中最后一个节点的索引。

Current

在派生类中重写时,获取此 XPathNodeIteratorXPathNavigator 对象,它定位在当前上下文节点上。

CurrentPosition

当在派生的类中重写时,获取所选节点集中当前位置的索引。

方法

Clone()

当在派生类中重写时,返回此 XPathNodeIterator 对象的复本。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetEnumerator()

返回 IEnumerator 对象以循环访问所选的节点集。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MoveNext()

在派生类中重写时,将 Current 属性返回的 XPathNavigator 对象移至选定节点集中的下一个节点。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

ICloneable.Clone()

创建作为当前实例副本的新对象。

扩展方法

Cast<TResult>(IEnumerable)

IEnumerable 的元素强制转换为指定的类型。

OfType<TResult>(IEnumerable)

根据指定类型筛选 IEnumerable 的元素。

AsParallel(IEnumerable)

启用查询的并行化。

AsQueryable(IEnumerable)

IEnumerable 转换为 IQueryable

适用于