Freigeben über


XmlNode.SelectSingleNode Methode

Definition

Wählt den ersten XmlNode aus, der dem XPath-Ausdruck entspricht.

Überlädt

Name Beschreibung
SelectSingleNode(String)

Wählt den ersten XmlNode aus, der dem XPath-Ausdruck entspricht.

SelectSingleNode(String, XmlNamespaceManager)

Wählt den ersten XmlNode aus, der dem XPath-Ausdruck entspricht. Alle Präfixe, die im XPath-Ausdruck gefunden werden, werden mithilfe der bereitgestellten XmlNamespaceManageraufgelöst.

Beispiele

Im folgenden Beispiel wird das erste Buch mit dem entsprechenden Autorennamen zurückgegeben. Der XmlNamespaceManager Standardwertnamespace wird im XPath-Ausdruck aufgelöst.

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

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

      // Create an XmlNamespaceManager to resolve the default namespace.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:newbooks-schema");

      // Select the first book written by an author whose last name is Atwood.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
     book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);

      Console.WriteLine(book.OuterXml);
  }
}
Imports System.IO
Imports System.Xml

Public Class Sample

  Public Shared Sub Main()

      Dim doc As XmlDocument = New XmlDocument()
      doc.Load("newbooks.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:newbooks-schema")

      'Select the book written by an author whose last name is Atwood.
      Dim book As XmlNode 
      Dim root As XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr)

      Console.WriteLine(book.OuterXml)

  End Sub
End Class

Im Beispiel wird die Datei als newbooks.xmlEingabe verwendet.

<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
  <book genre="novel" style="hardcover">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" style="other">
    <title>The Poisonwood Bible</title>
    <author>
      <first-name>Barbara</first-name>
      <last-name>Kingsolver</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

Hinweise

XPath-Ausdrücke können Namespaces enthalten. Die Namespaceauflösung wird mithilfe der XmlNamespaceManager. Wenn der XPath-Ausdruck ein Präfix enthält, muss dem Präfix- und Namespace-URI-Paar das Präfix und das XmlNamespaceManagerNamespace-URI-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 Namespace-URI 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.

SelectSingleNode(String)

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

Wählt den ersten XmlNode aus, der dem XPath-Ausdruck entspricht.

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

Parameter

xpath
String

Der XPath-Ausdruck.

Gibt zurück

Der erste XmlNode , der der XPath-Abfrage entspricht oder null wenn kein übereinstimmenden Knoten gefunden wird.

Ausnahmen

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

Beispiele

Im folgenden Beispiel wird der Preis des ersten Jane Austen-Buchs geändert.

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

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

    XmlNode book;
    XmlNode root = doc.DocumentElement;

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

    //Change the price on the book.
    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 root as XmlNode = doc.DocumentElement

    book=root.SelectSingleNode("descendant::book[author/last-name='Austen']")
 
    'Change the price on the book.
    book.LastChild.InnerText="15.95"

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  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

Wenn für den XPath-Ausdruck eine Namespaceauflösung erforderlich ist, müssen Sie die Überladung verwenden, die SelectSingleNode 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 weiterhin den XmlNamespaceManager Präfix- und Namespace-URI verwenden und diesem hinzufügen. Andernfalls erhalten Sie keinen ausgewählten Knoten. 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 einfaches Anführungszeichen (') oder ein doppeltes Anführungszeichen (") in den Ausdruck aufzunehmen. Wenn Sie nach einem Wert suchen müssen, der ein einzelnes Anführungszeichen enthält, müssen Sie die Zeichenfolge in doppelte Anführungszeichen setzen. Wenn Sie nach einem Wert suchen müssen, der ein doppeltes Anführungszeichen enthält, müssen Sie die Zeichenfolge in einfache Anführungszeichen setzen.

Angenommen, Sie haben den folgenden XML-Code:

<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:

book = root.SelectSingleNode("descendant::book[title=""'Emma'""]")

Diese Methode ist eine Microsoft Erweiterung für das Document Object Model (DOM).

Weitere Informationen

Gilt für:

SelectSingleNode(String, XmlNamespaceManager)

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

Wählt den ersten XmlNode aus, der dem XPath-Ausdruck entspricht. Alle Präfixe, die im XPath-Ausdruck gefunden werden, werden mithilfe der bereitgestellten XmlNamespaceManageraufgelöst.

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

Parameter

xpath
String

Der XPath-Ausdruck.

nsmgr
XmlNamespaceManager

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

Gibt zurück

Der erste XmlNode , der der XPath-Abfrage entspricht oder null wenn kein übereinstimmenden Knoten gefunden wird.

Ausnahmen

Der XPath-Ausdruck enthält ein Präfix, das nicht in der XmlNamespaceManager.

Beispiele

Im folgenden Beispiel wird das Buch mit dem entsprechenden ISBN-Wert ausgewählt.

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 the book node with the matching attribute value.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr);

      Console.WriteLine(book.OuterXml);
  }
}
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 the book node with the matching attribute value.
      Dim book as XmlNode 
      Dim root as XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr)

      Console.WriteLine(book.OuterXml)

  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. Die Namespaceauflösung wird mithilfe der XmlNamespaceManager. Wenn der XPath-Ausdruck ein Präfix enthält, muss dem Präfix- und Namespace-URI-Paar das Präfix und das XmlNamespaceManagerNamespace-URI-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 Namespace weiterhin ein Präfix und einen Namespace-URI XmlNamespaceManagerhinzufügen. Andernfalls wird kein Knoten ausgewählt. Weitere Informationen finden Sie unter Auswählen von Knoten mithilfe der XPath-Navigation.

Beispiel: Wenn Sie den folgenden XML-Code hatten:

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

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

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

Hinweis

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

Angenommen, Sie haben 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 einfache Anführungszeichen enthält:

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

Diese Methode ist eine Microsoft Erweiterung für das Document Object Model (DOM).

Weitere Informationen

Gilt für: