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

返回

Boolean

如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有更多同级节点或如果 XPathNavigator 当前位于属性节点上,则为 falsetrue 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

要移动到的同级节点的 XPathNodeTypeThe XPathNodeType of the sibling node to move to.

返回

Boolean

如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有更多同级节点或如果 XPathNavigator 当前位于属性节点上,则为 falsetrue 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 ElementProcessingInstructionCommentTextElement, ProcessingInstruction, Comment, or Text.
Text ElementProcessingInstructionCommentTextElement, ProcessingInstruction, Comment, or Text.
ProcessingInstruction ElementProcessingInstructionCommentTextElement, ProcessingInstruction, Comment, or Text.
Comment ElementProcessingInstructionCommentTextElement, ProcessingInstruction, Comment, or Text.
所有其他 XPathNodeTypeAll 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.

返回

Boolean

如果 XPathNavigator 成功地移动到下一个同级节点,则为 true;如果没有其他同级节点,或者如果 XPathNavigator 当前定位在属性节点上,则为 falsetrue 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.

适用于