XPathNavigator.MoveToNext 方法
定义
将 XPathNavigator 移至当前节点的下一个同级节点。Moves the XPathNavigator to the next sibling node of the current node.
重载
| MoveToNext() |
当在派生类中被重写时,将 XPathNavigator 移动到当前节点的下一个同级节点。When overridden in a derived class, moves the XPathNavigator to the next sibling node of the current node. |
| MoveToNext(XPathNodeType) |
将 XPathNavigator 移动到当前节点中与指定的 XPathNodeType 匹配的下一个同级节点。Moves the XPathNavigator to the next sibling node of the current node that matches the XPathNodeType specified. |
| MoveToNext(String, String) |
将 XPathNavigator 移动到下一个具有指定的本地名称和命名空间 URI 的同级节点。Moves the XPathNavigator to the next sibling node with the local name and namespace URI specified. |
MoveToNext()
当在派生类中被重写时,将 XPathNavigator 移动到当前节点的下一个同级节点。When overridden in a derived class, moves the XPathNavigator to the next sibling node of the current node.
public:
abstract bool MoveToNext();
public abstract bool MoveToNext ();
abstract member MoveToNext : unit -> bool
Public MustOverride Function MoveToNext () As Boolean
返回
如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有更多同级节点或如果 XPathNavigator 当前位于属性节点上,则为 false。true if the XPathNavigator is successful moving to the next sibling node; otherwise, false if there are no more siblings or if the XPathNavigator is currently positioned on an attribute node. 如果为 false,则 XPathNavigator 的位置不变。If false, the position of the XPathNavigator is unchanged.
示例
下面的示例以递归方式循环访问节点树,并显示有关元素和文本节点的信息。The following example iterates over the node tree recursively, and displays information about element and text nodes.
static void XPathNavigatorMethods_MoveToNext()
{
XPathDocument^ document = gcnew XPathDocument("books.xml");
XPathNavigator^ navigator = document->CreateNavigator();
XPathNodeIterator^ nodeset = navigator->Select("descendant::book[author/last-name='Melville']");
while (nodeset->MoveNext())
{
// Clone iterator here when working with it.
RecursiveWalk(nodeset->Current->Clone());
}
}
static void RecursiveWalk(XPathNavigator^ navigator)
{
switch (navigator->NodeType)
{
case XPathNodeType::Element:
if (navigator->Prefix == String::Empty)
Console::WriteLine("<{0}>", navigator->LocalName);
else
Console::Write("<{0}:{1}>", navigator->Prefix, navigator->LocalName);
Console::WriteLine("\t" + navigator->NamespaceURI);
break;
case XPathNodeType::Text:
Console::WriteLine("\t" + navigator->Value);
break;
}
if (navigator->MoveToFirstChild())
{
do
{
RecursiveWalk(navigator);
} while (navigator->MoveToNext());
navigator->MoveToParent();
if (navigator->NodeType == XPathNodeType::Element)
Console::WriteLine("</{0}>", navigator->Name);
}
else
{
if (navigator->NodeType == XPathNodeType::Element)
{
Console::WriteLine("</{0}>", navigator->Name);
}
}
}
static void XPathNavigatorMethods_MoveToNext()
{
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathNodeIterator nodeset = navigator.Select("descendant::book[author/last-name='Melville']");
while (nodeset.MoveNext())
{
// Clone iterator here when working with it.
RecursiveWalk(nodeset.Current.Clone());
}
}
public static void RecursiveWalk(XPathNavigator navigator)
{
switch (navigator.NodeType)
{
case XPathNodeType.Element:
if (string.IsNullOrEmpty(navigator.Prefix))
Console.WriteLine("<{0}>", navigator.LocalName);
else
Console.Write("<{0}:{1}>", navigator.Prefix, navigator.LocalName);
Console.WriteLine("\t" + navigator.NamespaceURI);
break;
case XPathNodeType.Text:
Console.WriteLine("\t" + navigator.Value);
break;
}
if (navigator.MoveToFirstChild())
{
do
{
RecursiveWalk(navigator);
} while (navigator.MoveToNext());
navigator.MoveToParent();
if (navigator.NodeType == XPathNodeType.Element)
Console.WriteLine("</{0}>", navigator.Name);
}
else
{
if (navigator.NodeType == XPathNodeType.Element)
{
Console.WriteLine("</{0}>", navigator.Name);
}
}
}
Shared Sub XPathNavigatorMethods_MoveToNext()
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim nodeset As XPathNodeIterator = navigator.Select("descendant::book[author/last-name='Melville']")
While nodeset.MoveNext()
' Clone iterator here when working with it.
RecursiveWalk(nodeset.Current.Clone())
End While
End Sub
Shared Sub RecursiveWalk(ByVal navigator As XPathNavigator)
Select Case navigator.NodeType
Case XPathNodeType.Element
If navigator.Prefix = String.Empty Then
Console.WriteLine("<{0}>", navigator.LocalName)
Else
Console.Write("<{0}:{1}>", navigator.Prefix, navigator.LocalName)
Console.WriteLine(vbTab + navigator.NamespaceURI)
End If
Case XPathNodeType.Text
Console.WriteLine(vbTab + navigator.Value)
End Select
If navigator.MoveToFirstChild() Then
Do
RecursiveWalk(navigator)
Loop While (navigator.MoveToNext())
navigator.MoveToParent()
If (navigator.NodeType = XPathNodeType.Element) Then
Console.WriteLine("</{0}>", navigator.Name)
End If
Else
If navigator.NodeType = XPathNodeType.Element Then
Console.WriteLine("</{0}>", navigator.Name)
End If
End If
End Sub
该示例使用 books.xml 文件作为输入。The example takes the books.xml file as an input.
<?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>
另请参阅
适用于
MoveToNext(XPathNodeType)
将 XPathNavigator 移动到当前节点中与指定的 XPathNodeType 匹配的下一个同级节点。Moves the XPathNavigator to the next sibling node of the current node that matches the XPathNodeType specified.
public:
virtual bool MoveToNext(System::Xml::XPath::XPathNodeType type);
public virtual bool MoveToNext (System.Xml.XPath.XPathNodeType type);
abstract member MoveToNext : System.Xml.XPath.XPathNodeType -> bool
override this.MoveToNext : System.Xml.XPath.XPathNodeType -> bool
Public Overridable Function MoveToNext (type As XPathNodeType) As Boolean
参数
- type
- XPathNodeType
要移动到的同级节点的 XPathNodeType。The XPathNodeType of the sibling node to move to.
返回
如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有更多同级节点或如果 XPathNavigator 当前位于属性节点上,则为 false。true if the XPathNavigator is successful moving to the next sibling node; otherwise, false if there are no more siblings or if the XPathNavigator is currently positioned on an attribute node. 如果为 false,则 XPathNavigator 的位置不变。If false, the position of the XPathNavigator is unchanged.
注解
方法的返回值 MoveToNext 取决于 XPathNodeType 当前节点的,以及 XPathNodeType 要移动到的下一个同级节点的。The return value of the MoveToNext method depends on the XPathNodeType of the current node and the XPathNodeType of the next sibling node to move to.
下表显示了 XPathNodeType 可移动到的不同节点和同级节点。The following table shows the different XPathNodeType nodes and the sibling nodes they can move to.
| 当前节点的 XPathNodeTypeCurrent Node's XPathNodeType | 同级节点的 XPathNodeTypeSibling Node's XPathNodeType |
|---|---|
| Element | Element、ProcessingInstruction、Comment 或 Text。Element, ProcessingInstruction, Comment, or Text. |
| Text | Element、ProcessingInstruction、Comment 或 Text。Element, ProcessingInstruction, Comment, or Text. |
| ProcessingInstruction | Element、ProcessingInstruction、Comment 或 Text。Element, ProcessingInstruction, Comment, or Text. |
| Comment | Element、ProcessingInstruction、Comment 或 Text。Element, ProcessingInstruction, Comment, or Text. |
| 所有其他 XPathNodeType 值All other XPathNodeType values | 无。None. |
适用于
MoveToNext(String, String)
将 XPathNavigator 移动到下一个具有指定的本地名称和命名空间 URI 的同级节点。Moves the XPathNavigator to the next sibling node with the local name and namespace URI specified.
public:
virtual bool MoveToNext(System::String ^ localName, System::String ^ namespaceURI);
public virtual bool MoveToNext (string localName, string namespaceURI);
abstract member MoveToNext : string * string -> bool
override this.MoveToNext : string * string -> bool
Public Overridable Function MoveToNext (localName As String, namespaceURI As String) As Boolean
参数
- localName
- String
要移动到的下一个同级节点的本地名称。The local name of the next sibling node to move to.
- namespaceURI
- String
要移动到的下一个同级节点的命名空间 URI。The namespace URI of the next sibling node to move to.
返回
如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有其他同级节点,或者如果 XPathNavigator 当前定位在属性节点上,则为 false。true if the XPathNavigator is successful moving to the next sibling node; false if there are no more siblings, or if the XPathNavigator is currently positioned on an attribute node. 如果为 false,则 XPathNavigator 的位置不变。If false, the position of the XPathNavigator is unchanged.