XPathNodeIterator 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在选定节点集上提供一个迭代器。
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
应使用 MoveNext 和 Current 或使用 GetEnumerator。 结合使用这两种方法可能会导致意外结果。 例如,如果 MoveNext 先调用 方法,然后在 GetEnumerator 循环中 foreach
调用 该方法,则 foreach
循环不会从集合的开头开始枚举结果,而是从方法后 Current 的位置开始枚举结果。
实施者说明
从 XPathNodeIterator 类继承时,必须重写以下成员:
构造函数
XPathNodeIterator() |
初始化 XPathNodeIterator 类的新实例。 |
属性
Count |
获取所选节点集中最后一个节点的索引。 |
Current |
在派生类中重写时,获取此 XPathNodeIterator的 XPathNavigator 对象,它定位在当前上下文节点上。 |
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。 |