XmlNode.SelectNodes Methode

Definition

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.Selects a list of nodes matching the XPath expression.

Überlädt

SelectNodes(String)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.Selects a list of nodes matching the XPath expression.

SelectNodes(String, XmlNamespaceManager)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.Selects a list of nodes matching the XPath expression. Sämtliche im XPath-Ausdruck vorhandenen Präfixe werden mit dem angegebenen XmlNamespaceManager aufgelöst.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

Hinweise

XPath-Ausdrücke können Namespaces enthalten.XPath expressions can include namespaces. Namespace-Auflösung wird mithilfe von XmlNamespaceManager unterstützt.Namespace resolution is supported using the XmlNamespaceManager. Wenn der XPath-Ausdruck ein Präfix enthält, müssen das Paar aus Präfix-und Namespace-URI dem XmlNamespaceManager hinzugefügt werden.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Wenn Ihr XML-Code einen Standard Namespace enthält, müssen Sie dem XmlNamespaceManager; immer noch ein Präfix und einen Namespace-URI hinzufügen. Andernfalls werden keine Knoten ausgewählt.If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get any nodes selected.

Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.For more information, see Select Nodes Using XPath Navigation. Wählen Sie im vorherigen Abschnitt eine Überladung aus der Überladungs Liste aus, um Codebeispiele zu erhalten.For code examples, choose an overload from the overload list in the previous section.

SelectNodes(String)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.Selects a list of nodes matching the XPath expression.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::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.The XPath expression.

Gibt zurück

Eine XmlNodeList mit einer Auflistung der Knoten, die mit der XPath-Abfrage übereinstimmen.An XmlNodeList containing a collection of nodes matching the XPath query.

Ausnahmen

Der XPath-Ausdruck enthält ein Präfix.The XPath expression contains a prefix. Siehe XPath-Beispiele.See XPath Examples.

Beispiele

Im folgenden Beispiel werden alle Bücher ausgewählt, bei denen der Nachname des Autors Austen ist, und dann der Preis dieser Bücher geändert wird.The following example selects all books where the author's last name is Austen, and then changes the price of those books.

#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.IO;
using System.Xml;

public class Sample {

  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:This example uses the following XML:


<?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 für den XPath-Ausdruck eine Namespace Auflösung erforderlich ist, müssen Sie die SelectNodes-Überladung verwenden, die eine XmlNamespaceManager als Argument annimmt.If the XPath expression requires namespace resolution, you must use the SelectNodes overload which takes an XmlNamespaceManager as its argument. Der XmlNamespaceManager wird zum Auflösen von Namespaces verwendet.The XmlNamespaceManager is used to resolve namespaces.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Wenn Ihr XML-Code einen Standard Namespace enthält, müssen Sie den XmlNamespaceManager weiterhin verwenden und ihm ein Präfix und einen Namespace-URI hinzufügen. Andernfalls werden keine Knoten ausgewählt.If your XML includes a default namespace, you must still use the XmlNamespaceManager and add a prefix and namespace URI to it; otherwise, you will not get any nodes selected. Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.For more information, see Select Nodes Using XPath Navigation.

Hinweis

Ein häufiges Problem beim Formulieren von XPath-Ausdrücken besteht darin, wie Sie ein einzelnes Anführungszeichen (') oder doppelte Anführungszeichen (") in den Ausdruck einschließen.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 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.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 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.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Nehmen Sie beispielsweise an, Sie verfügen über die folgenden XML-Daten:For example, suppose you have the following XML:

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

Der folgende Visual Basic Code wählt ein Element aus, das einfache Anführungszeichen enthält:The following Visual Basic code selects an element that contains single quotes:

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

Diese Methode ist eine Microsoft-Erweiterung für die Dokumentobjektmodell (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

Das von dieser Methode zurückgegebene XmlNodeList-Objekt ist gültig, während das zugrunde liegende Dokument unverändert bleibt.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Wenn das zugrunde liegende Dokument geändert wird, können unerwartete Ergebnisse zurückgegeben werden (es wird keine Ausnahme ausgelöst).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Siehe auch

SelectNodes(String, XmlNamespaceManager)

Wählt eine Liste von Knoten aus, die mit dem XPath-Ausdruck übereinstimmen.Selects a list of nodes matching the XPath expression. Sämtliche im XPath-Ausdruck vorhandenen Präfixe werden mit dem angegebenen XmlNamespaceManager aufgelöst.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::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.The XPath expression. Siehe XPath-Beispiele.See XPath Examples.

nsmgr
XmlNamespaceManager

Ein XmlNamespaceManager zum Auflösen von Namespaces für Präfixe im XPath-Ausdruck.An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

Gibt zurück

Eine XmlNodeList mit einer Auflistung der Knoten, die mit der XPath-Abfrage übereinstimmen.An XmlNodeList containing a collection of nodes matching the XPath query.

Ausnahmen

Der XPath-Ausdruck enthält ein Präfix, das im XmlNamespaceManager nicht definiert ist.The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

Beispiele

Im folgenden Beispiel werden die Werte der einzelnen ISBN-Attribute angezeigt.The following example displays the values of each of the ISBN attributes. In diesem Beispiel wird ein XmlElement-Objekt verwendet, das von der XmlNode-Klasse erbt.This example uses an XmlElement object, which inherits from the XmlNode class.

#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 booksort.xml als Eingabe verwendet.The example uses the file, booksort.xml, as input.


<?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.XPath expressions can include namespaces. Namespace-Auflösung wird mithilfe von XmlNamespaceManager unterstützt.Namespace resolution is supported using the XmlNamespaceManager. Wenn der XPath-Ausdruck ein Präfix enthält, müssen das Paar aus Präfix-und Namespace-URI dem XmlNamespaceManager hinzugefügt werden.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Hinweis

Wenn der XPath-Ausdruck kein Präfix enthält, wird davon ausgegangen, dass der Namespace-URI der leere Namespace ist.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Wenn Ihr XML-Code einen Standard Namespace enthält, müssen Sie dem XmlNamespaceManager; immer noch ein Präfix und einen Namespace-URI hinzufügen. Andernfalls werden keine Knoten ausgewählt.If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get any nodes selected. Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.For more information, see Select Nodes Using XPath Navigation.

Wenn Sie z. b. den folgenden XML-Code haben:For example, if you had the following XML:

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

Der folgende C# Code wählt alle Buch Knoten aus:The following C# code selects all book nodes:

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 besteht darin, wie Sie ein einzelnes Anführungszeichen (') oder doppelte Anführungszeichen (") in den Ausdruck einschließen.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 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.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 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.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Nehmen Sie beispielsweise an, Sie verfügen über die folgenden XML-Daten:For example, suppose you have the following XML:

<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 einfache Anführungszeichen enthält:The following Visual Basic code selects an element that contains single quotes:

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 die Dokumentobjektmodell (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

Das von dieser Methode zurückgegebene XmlNodeList-Objekt ist gültig, während das zugrunde liegende Dokument unverändert bleibt.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Wenn das zugrunde liegende Dokument geändert wird, können unerwartete Ergebnisse zurückgegeben werden (es wird keine Ausnahme ausgelöst).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Siehe auch

Gilt für: