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 XmlNamespaceManagerhinzugefü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 trotzdem 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)

Quelle:
XmlNode.cs
Quelle:
XmlNode.cs
Quelle:
XmlNode.cs

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

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, bei denen der Nachname des Autors Austen lautet, und dann der Preis dieser Bücher geändert.

#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 der folgende XML-Code 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 eine Namespaceauflösung erfordert, müssen Sie die SelectNodes Überladung verwenden, die ein XmlNamespaceManager als Argument annimmt. Wird XmlNamespaceManager 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 weiterhin den XmlNamespaceManager verwenden und diesem ein Präfix und einen Namespace-URI hinzufügen. 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 Formulieren von XPath-Ausdrücken ist das Einschließen eines einzelnen Anführungszeichens (') oder eines doppelten Anführungszeichens (") in den Ausdruck. 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 einzelne 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 Document Object Model (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).

Weitere Informationen

Gilt für:

SelectNodes(String, XmlNamespaceManager)

Quelle:
XmlNode.cs
Quelle:
XmlNode.cs
Quelle:
XmlNode.cs

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

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 XmlNamespaceManagerhinzugefü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 trotzdem 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. über den folgenden XML-Code verfügen:

<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 Formulieren von XPath-Ausdrücken ist das Einschließen eines einzelnen Anführungszeichens (') oder eines doppelten Anführungszeichens (") in den Ausdruck. 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 einzelne 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 Document Object Model (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).

Weitere Informationen

Gilt für: