XPathNavigator.MoveToNext Метод

Определение

Перемещает объект XPathNavigator в следующий узел одного уровня с текущим узлом.

Перегрузки

MoveToNext()

При переопределении в производном классе перемещает XPathNavigator к следующему сестринскому узлу текущего узла.

MoveToNext(XPathNodeType)

Перемещает XPathNavigator к следующему узлу-брату текущего узла, соответствующему заданному XPathNodeType.

MoveToNext(String, String)

Перемещает XPathNavigator к следующему узлу-брату с заданным локальным именем и URI пространства имен.

MoveToNext()

При переопределении в производном классе перемещает XPathNavigator к следующему сестринскому узлу текущего узла.

public:
 abstract bool MoveToNext();
public abstract bool MoveToNext ();
abstract member MoveToNext : unit -> bool
Public MustOverride Function MoveToNext () As Boolean

Возвращаемое значение

Boolean

Значение true, если XPathNavigator успешно перемещается к следующему сестринскому узлу; в противном случае — значение false, если больше нет сестринских узлов, или если XPathNavigator в данный момент находится в узле атрибута. Если возвращается значение false, то положение XPathNavigator остается неизменным.

Примеры

В следующем примере выполняется рекурсивная перебор дерева узлов и отображается информация об элементах и текстовых узлах.

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.

<?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.

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 узла-брата, к которому следует перейти.

Возвращаемое значение

Boolean

Значение true, если XPathNavigator успешно перемещается к следующему сестринскому узлу; в противном случае — значение false, если больше нет сестринских узлов, или если XPathNavigator в данный момент находится в узле атрибута. Если возвращается значение false, то положение XPathNavigator остается неизменным.

Комментарии

Возвращаемое значение MoveToNext метода зависит от XPathNodeType текущего узла и XPathNodeType следующего одноуровневого узла, на который необходимо перейти.

В следующей таблице показаны различные XPathNodeType узлы и одноуровневые узлы, на которые они могут перейти.

XPathNodeType текущего узла XPathNodeType узла с одноуровневой узлом
Element Element, ProcessingInstruction, Comment или Text.
Text Element, ProcessingInstruction, Comment или Text.
ProcessingInstruction Element, ProcessingInstruction, Comment или Text.
Comment Element, ProcessingInstruction, Comment или Text.
Все остальные XPathNodeType значения Отсутствует.

Применяется к

MoveToNext(String, String)

Перемещает XPathNavigator к следующему узлу-брату с заданным локальным именем и URI пространства имен.

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

Локальное имя следующего узла того же уровня, к которому следует перейти.

namespaceURI
String

URI пространства имен следующего узла того же уровня, к которому следует перейти.

Возвращаемое значение

Boolean

true, если XPathNavigator успешно перемещается к следующему узлу-брату текущего узла; false, если больше нет узлов-братьев, или если XPathNavigator в данный момент находится на узле атрибута. Если возвращается значение false, то положение XPathNavigator остается неизменным.

Применяется к