XPathNodeIterator.MoveNext Metodo

Definizione

Quando è sottoposto a override in una classe derivata, sposta l’oggetto XPathNavigator restituito dalla proprietà Current al nodo successivo nel set di nodi selezionato.

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

Restituisce

Boolean

true se l’oggetto XPathNavigator è spostato al nodo successivo; false se non sono presenti nodi selezionati.

Esempio

Nell'esempio XPathNavigator seguente viene usato il Select metodo della classe per selezionare un set di nodi usando la XPathNodeIterator classe .

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

Nell'esempio il file books.xml viene considerato come 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>  

Commenti

L'oggetto XPathNodeIterator viene posizionato nel primo nodo del set di nodi selezionato solo dopo la chiamata iniziale al MoveNext metodo . Il set di nodi viene creato nell'ordine dei documenti. Pertanto, la chiamata al MoveNext metodo passa al nodo successivo nell'ordine del documento.

Esistono due modi per eseguire l'iterazione su una XPathNavigator raccolta usando la XPathNodeIterator classe .

Un modo consiste nell'usare il MoveNext metodo e quindi chiamare Current per ottenere l'istanza corrente XPathNavigator , come nell'esempio seguente:

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

Un altro modo consiste nell'usare un foreach ciclo per chiamare il metodo e usare l'interfaccia GetEnumerator restituita IEnumerator per enumerare i nodi, come nell'esempio seguente:

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

È consigliabile usare il MoveNext metodo e Current usare il GetEnumerator metodo . La combinazione di questi due approcci può causare risultati imprevisti. Ad esempio, se il metodo viene chiamato prima e quindi il MoveNext GetEnumerator metodo viene chiamato nel foreach ciclo, il foreach ciclo non inizierà ad enumerare i risultati dall'inizio della raccolta, ma dalla posizione dopo il Current metodo.

Si applica a

Vedi anche