XmlNode.SelectSingleNode Methode

Definitie

Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie.

Overloads

Name Description
SelectSingleNode(String)

Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie.

SelectSingleNode(String, XmlNamespaceManager)

Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie. Alle voorvoegsels in de XPath-expressie worden omgezet met behulp van de opgegeven XmlNamespaceManager.

Voorbeelden

In het volgende voorbeeld wordt het eerste boek geretourneerd met de overeenkomende naam van de auteur. Hiermee XmlNamespaceManager wordt de standaardnaamruimte in de XPath-expressie omgezet.

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

In het voorbeeld wordt het bestand als newbooks.xmlinvoer gebruikt.

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

Opmerkingen

XPath-expressies kunnen naamruimten bevatten. Naamruimteomzetting wordt ondersteund met behulp van de XmlNamespaceManager. Als de XPath-expressie een voorvoegsel bevat, moeten het voor- en naamruimte-URI-paar worden toegevoegd aan het XmlNamespaceManager.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds een voorvoegsel en naamruimte-URI toevoegen aan de XmlNamespaceManager. Anders worden er geen knooppunten geselecteerd. Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie.

SelectSingleNode(String)

Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie.

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

Parameters

xpath
String

De XPath-expressie. Zie XPath-voorbeelden.

Retouren

De eerste XmlNode die overeenkomt met de XPath-query of null als er geen overeenkomend knooppunt wordt gevonden.

Uitzonderingen

De XPath-expressie bevat een voorvoegsel.

Voorbeelden

In het volgende voorbeeld wordt de prijs van het eerste Jane Austen-boek gewijzigd.

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

In het voorbeeld wordt het bestand als booksort.xmlinvoer gebruikt.


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

Opmerkingen

Als voor de XPath-expressie naamruimteomzetting is vereist, moet u de SelectSingleNode overbelasting gebruiken die een XmlNamespaceManager als argument gebruikt. De XmlNamespaceManager naamruimten worden gebruikt om naamruimten op te lossen.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds het XmlNamespaceManager voorvoegsel en de naamruimte-URI eraan toevoegen. Anders krijgt u geen geselecteerd knooppunt. Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie.

Note

Een veelvoorkomend probleem bij het formuleren van XPath-expressies is het opnemen van één aanhalingsteken (') of dubbele aanhalingsteken (") in de expressie. Als u moet zoeken naar een waarde die één aanhalingsteken bevat, moet u de tekenreeks tussen dubbele aanhalingstekens plaatsen. Als u wilt zoeken naar een waarde die een dubbele aanhalingsteken bevat, moet u de tekenreeks tussen enkele aanhalingstekens plaatsen.

Stel dat u de volgende XML hebt:

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

Met de volgende Visual Basic code wordt een element geselecteerd dat enkele aanhalingstekens bevat:

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

Deze methode is een Microsoft extensie voor het Document Object Model (DOM).

Zie ook

Van toepassing op

SelectSingleNode(String, XmlNamespaceManager)

Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie. Alle voorvoegsels in de XPath-expressie worden omgezet met behulp van de opgegeven XmlNamespaceManager.

public:
 System::Xml::XmlNode ^ SelectSingleNode(System::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

Parameters

xpath
String

De XPath-expressie. Zie XPath-voorbeelden.

nsmgr
XmlNamespaceManager

Een XmlNamespaceManager te gebruiken voor het omzetten van naamruimten voor voorvoegsels in de XPath-expressie.

Retouren

De eerste XmlNode die overeenkomt met de XPath-query of null als er geen overeenkomend knooppunt wordt gevonden.

Uitzonderingen

De XPath-expressie bevat een voorvoegsel dat niet is gedefinieerd in de XmlNamespaceManager.

Voorbeelden

In het volgende voorbeeld wordt het boek geselecteerd met de overeenkomende ISBN-waarde.

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

In het voorbeeld wordt het bestand als booksort.xmlinvoer gebruikt.


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

Opmerkingen

XPath-expressies kunnen naamruimten bevatten. Naamruimteomzetting wordt ondersteund met behulp van de XmlNamespaceManager. Als de XPath-expressie een voorvoegsel bevat, moeten het voor- en naamruimte-URI-paar worden toegevoegd aan het XmlNamespaceManager.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds een voorvoegsel en naamruimte-URI toevoegen aan de XmlNamespaceManager. Anders krijgt u geen knooppunt geselecteerd. Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie.

Als u bijvoorbeeld de volgende XML hebt:

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

Met de volgende C#-code wordt het eerste boekknooppunt geselecteerd:

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

Note

Een veelvoorkomend probleem bij het formuleren van XPath-expressies is het opnemen van één aanhalingsteken (') of dubbele aanhalingsteken (") in de expressie. Als u moet zoeken naar een waarde die één aanhalingsteken bevat, moet u de tekenreeks tussen dubbele aanhalingstekens plaatsen. Als u wilt zoeken naar een waarde die een dubbele aanhalingsteken bevat, moet u de tekenreeks tussen enkele aanhalingstekens plaatsen.

Stel dat u de volgende XML hebt:

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

Met de volgende Visual Basic code wordt een element geselecteerd dat enkele aanhalingstekens bevat:

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)

Deze methode is een Microsoft extensie voor het Document Object Model (DOM).

Zie ook

Van toepassing op