XmlNode.SelectNodes Methode

Definition

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.

Überlädt

SelectNodes(String)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.

SelectNodes(String, XmlNamespaceManager)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen. Sämtliche im XPath-Ausdruck vorhandenen Präfixe werden mit dem angegebenen XmlNamespaceManager aufgelöst.

Hinweise

XPath-Ausdrücke können Namespaces enthalten. Namespace-Auflösung wird mithilfe von XmlNamespaceManager unterstützt. Wenn der XPath-Ausdruck ein Präfix enthält, muss das Präfix- und Namespace-URI-Paar dem XmlNamespaceManagerURI-Paar hinzugefügt werden.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML einen Standardnamespace enthält, müssen Sie dem URI des Namespaces weiterhin ein Präfix und einen Namespace-URI XmlNamespaceManagerhinzufügen. Andernfalls werden keine Knoten ausgewählt.

Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation. Wählen Sie für Codebeispiele eine Überladung aus der Überladungsliste im vorherigen Abschnitt aus.

SelectNodes(String)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath);
public System.Xml.XmlNodeList? SelectNodes (string xpath);
public System.Xml.XmlNodeList SelectNodes (string xpath);
member this.SelectNodes : string -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String) As XmlNodeList

Parameter

xpath
String

Der XPath-Ausdruck.

Gibt zurück

XmlNodeList

Eine XmlNodeList mit einer Auflistung der Knoten, die mit der XPath-Abfrage übereinstimmen.

Ausnahmen

Der XPath-Ausdruck enthält ein Präfix. Siehe XPath-Beispiele.

Beispiele

Im folgenden Beispiel werden alle Bücher ausgewählt, in denen der Nachname des Autors austen ist, und ändert dann den Preis dieser Bücher.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   XmlNodeList^ nodeList;
   XmlNode^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "descendant::book[author/last-name='Austen']" );
   
   //Change the price on the books.
   System::Collections::IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ book = safe_cast<XmlNode^>(myEnum->Current);
      book->LastChild->InnerText = "15.95";
   }

   Console::WriteLine( "Display the modified XML document...." );
   doc->Save( Console::Out );
}
using System;
using System.Xml;

public class Sample6
{
    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("booksort.xml");

        XmlNodeList nodeList;
        XmlNode root = doc.DocumentElement;

        nodeList = root.SelectNodes("descendant::book[author/last-name='Austen']");

        //Change the price on the books.
        foreach (XmlNode book in nodeList)
        {
            book.LastChild.InnerText = "15.95";
        }

        Console.WriteLine("Display the modified XML document....");
        doc.Save(Console.Out);
    }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    'Create the XmlDocument.
    Dim doc as XmlDocument = new XmlDocument()
    doc.Load("booksort.xml")
           
    Dim book as XmlNode
    Dim nodeList as XmlNodeList 
    Dim root as XmlNode = doc.DocumentElement

    nodeList=root.SelectNodes("descendant::book[author/last-name='Austen']")
 
    'Change the price on the books.
    for each book in nodeList      
      book.LastChild.InnerText="15.95"
    next 

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  end sub
end class

In diesem Beispiel wird die folgende XML-Datei verwendet:


<?xml version="1.0"?>
<!-- A fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
  <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
    <title>Pride And Prejudice</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>24.95</price>
  </book>
  <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>29.95</price>
  </book>
  <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
    <title>Emma</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
    <title>Sense and Sensibility</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
</bookstore>

Hinweise

Wenn der XPath-Ausdruck Namespaceauflösung erfordert, müssen Sie die Überladung verwenden, die SelectNodes als XmlNamespaceManager Argument verwendet wird. Dies XmlNamespaceManager wird verwendet, um Namespaces aufzulösen.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML einen Standardnamespace enthält, müssen Sie den Präfix- und Namespace-URI trotzdem verwenden XmlNamespaceManager . Andernfalls werden keine Knoten ausgewählt. Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.

Hinweis

Ein häufiges Problem beim Erstellen von XPath-Ausdrücken besteht darin, ein einzelnes Anführungszeichen (') oder ein doppeltes Anführungszeichen (") in den Ausdruck einzuschließen. Wenn Sie nach einem Wert suchen müssen, der ein einzelnes Anführungszeichen enthält, müssen Sie die Zeichenfolge in doppelte Anführungszeichen einschließen. Wenn Sie nach einem Wert suchen müssen, der ein doppeltes Anführungszeichen enthält, müssen Sie die Zeichenfolge in einfache Anführungszeichen einschließen.

Angenommen, Sie verfügen über den folgenden XML-Code:

<bookstore>  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Der folgende Visual Basic Code wählt ein Element aus, das einzelne Anführungszeichen enthält:

nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")  

Diese Methode ist eine Microsoft-Erweiterung für das Dokumentobjektmodell (DOM).

Das XmlNodeList von dieser Methode zurückgegebene Objekt ist gültig, während das zugrunde liegende Dokument unverändert bleibt. Wenn sich das zugrunde liegende Dokument ändert, werden möglicherweise unerwartete Ergebnisse zurückgegeben (es wird keine Ausnahme ausgelöst).

Siehe auch

Gilt für

SelectNodes(String, XmlNamespaceManager)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen. Sämtliche im XPath-Ausdruck vorhandenen Präfixe werden mit dem angegebenen XmlNamespaceManager aufgelöst.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNodeList? SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
public System.Xml.XmlNodeList SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectNodes : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String, nsmgr As XmlNamespaceManager) As XmlNodeList

Parameter

xpath
String

Der XPath-Ausdruck. Siehe XPath-Beispiele.

nsmgr
XmlNamespaceManager

Ein XmlNamespaceManager zum Auflösen von Namespaces für Präfixe im XPath-Ausdruck.

Gibt zurück

XmlNodeList

Eine XmlNodeList mit einer Auflistung der Knoten, die mit der XPath-Abfrage übereinstimmen.

Ausnahmen

Der XPath-Ausdruck enthält ein Präfix, das im XmlNamespaceManager nicht definiert ist.

Beispiele

Im folgenden Beispiel werden die Werte der einzelnen ISBN-Attribute angezeigt. In diesem Beispiel wird ein XmlElement Objekt verwendet, das von der XmlNode Klasse erbt.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Collections;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   
   // Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( "bk", "urn:samples" );
   
   // Select and display the value of all the ISBN attributes.
   XmlNodeList^ nodeList;
   XmlElement^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "/bookstore/book/@bk:ISBN", nsmgr );
   IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ isbn = safe_cast<XmlNode^>(myEnum->Current);
      Console::WriteLine( isbn->Value );
   }
}
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

      XmlDocument doc = new XmlDocument();
      doc.Load("booksort.xml");

      //Create an XmlNamespaceManager for resolving namespaces.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:samples");

      //Select and display the value of all the ISBN attributes.
      XmlNodeList nodeList;
      XmlElement root = doc.DocumentElement;
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr);
      foreach (XmlNode isbn in nodeList){
        Console.WriteLine(isbn.Value);
      }
   }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

      Dim doc as XmlDocument = new XmlDocument()
      doc.Load("booksort.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:samples")

      'Select and display the value of all the ISBN attributes.
      Dim nodeList as XmlNodeList 
      Dim root as XmlElement = doc.DocumentElement
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr)
      Dim isbn as XmlNode
      for each isbn in nodeList
        Console.WriteLine(isbn.Value)
      next

  end sub
end class

Im Beispiel wird die Datei als booksort.xmlEingabe verwendet.


<?xml version="1.0"?>
<!-- A fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
  <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
    <title>Pride And Prejudice</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>24.95</price>
  </book>
  <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>29.95</price>
  </book>
  <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
    <title>Emma</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
    <title>Sense and Sensibility</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
</bookstore>

Hinweise

XPath-Ausdrücke können Namespaces enthalten. Namespace-Auflösung wird mithilfe von XmlNamespaceManager unterstützt. Wenn der XPath-Ausdruck ein Präfix enthält, muss das Präfix- und Namespace-URI-Paar dem XmlNamespaceManagerURI-Paar hinzugefügt werden.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist. Wenn Ihr XML einen Standardnamespace enthält, müssen Sie dem URI des Namespaces weiterhin ein Präfix und einen Namespace-URI XmlNamespaceManagerhinzufügen. Andernfalls werden keine Knoten ausgewählt. Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.

Wenn Sie z. B. die folgende XML-Datei hatten:

<bookstore xmlns="http://www.lucernepublishing.com">  
 <book>  
   <title>Pride And Prejudice</title>  
 </book>  
</bookstore>  

Der folgende C#-Code wählt alle Buchknoten aus:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");  
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);  

Hinweis

Ein häufiges Problem beim Erstellen von XPath-Ausdrücken besteht darin, ein einzelnes Anführungszeichen (') oder ein doppeltes Anführungszeichen (") in den Ausdruck einzuschließen. Wenn Sie nach einem Wert suchen müssen, der ein einzelnes Anführungszeichen enthält, müssen Sie die Zeichenfolge in doppelte Anführungszeichen einschließen. Wenn Sie nach einem Wert suchen müssen, der ein doppeltes Anführungszeichen enthält, müssen Sie die Zeichenfolge in einfache Anführungszeichen einschließen.

Angenommen, Sie verfügen über den folgenden XML-Code:

<bookstore xmlns="http://www.lucernepublishing.com">  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Der folgende Visual Basic Code wählt ein Element aus, das einzelne Anführungszeichen enthält:

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com")  
nodeList = root.SelectNodes("//ab:book[contains(ab:title,""'Emma'"")]", nsmgr)  

Diese Methode ist eine Microsoft-Erweiterung für das Dokumentobjektmodell (DOM).

Das XmlNodeList von dieser Methode zurückgegebene Objekt ist gültig, während das zugrunde liegende Dokument unverändert bleibt. Wenn sich das zugrunde liegende Dokument ändert, werden möglicherweise unerwartete Ergebnisse zurückgegeben (es wird keine Ausnahme ausgelöst).

Siehe auch

Gilt für