XmlNode.SelectSingleNode Metod

Definition

Väljer den första XmlNode som matchar XPath-uttrycket.

Överlagringar

Name Description
SelectSingleNode(String)

Väljer den första XmlNode som matchar XPath-uttrycket.

SelectSingleNode(String, XmlNamespaceManager)

Väljer den första XmlNode som matchar XPath-uttrycket. Alla prefix som finns i XPath-uttrycket matchas med hjälp av angivna XmlNamespaceManager.

Exempel

I följande exempel returneras den första boken med det matchande författarens namn. Löser XmlNamespaceManager standardnamnområdet i XPath-uttrycket.

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

I exemplet används filen , newbooks.xmlsom indata.

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

Kommentarer

XPath-uttryck kan innehålla namnområden. Namnområdesmatchning stöds med hjälp av XmlNamespaceManager. Om XPath-uttrycket innehåller ett prefix måste prefixet och namnområdets URI-par läggas till i XmlNamespaceManager.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om xml-koden innehåller ett standardnamnområde måste du fortfarande lägga till ett prefix och en namnområdes-URI i XmlNamespaceManager. Annars kommer du inte att få några noder markerade. Mer information finns i Välj noder med XPath-navigering.

SelectSingleNode(String)

Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs

Väljer den första XmlNode som matchar XPath-uttrycket.

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

Parametrar

xpath
String

XPath-uttrycket. Se XPath-exempel.

Returer

Den första XmlNode som matchar XPath-frågan eller null om ingen matchande nod hittas.

Undantag

XPath-uttrycket innehåller ett prefix.

Exempel

I följande exempel ändras priset för den första Jane Austen-boken.

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

I exemplet används filen , booksort.xmlsom indata.


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

Kommentarer

Om XPath-uttrycket kräver namnområdesmatchning måste du använda den SelectSingleNode överlagring som tar ett XmlNamespaceManager som argument. XmlNamespaceManager Används för att matcha namnområden.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om xml-koden innehåller ett standardnamnområde måste du fortfarande använda XmlNamespaceManager och lägga till ett prefix och en namnområdes-URI till den. Annars får du ingen vald nod. Mer information finns i Välj noder med XPath-navigering.

Note

Ett vanligt problem när du formulerar XPath-uttryck är hur du inkluderar ett enda citattecken (') eller dubbla citattecken (") i uttrycket. Om du måste söka efter ett värde som innehåller ett enda citattecken måste du omsluta strängen med dubbla citattecken. Om du behöver söka efter ett värde som innehåller ett dubbelt citattecken måste du omsluta strängen med enkla citattecken.

Anta till exempel att du har följande XML:

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

Följande Visual Basic kod väljer ett element som innehåller enkla citattecken:

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

Den här metoden är ett Microsoft-tillägg till dokumentobjektmodellen (DOM).

Se även

Gäller för

SelectSingleNode(String, XmlNamespaceManager)

Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs

Väljer den första XmlNode som matchar XPath-uttrycket. Alla prefix som finns i XPath-uttrycket matchas med hjälp av angivna XmlNamespaceManager.

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

Parametrar

xpath
String

XPath-uttrycket. Se XPath-exempel.

nsmgr
XmlNamespaceManager

En XmlNamespaceManager som ska användas för att matcha namnrymder för prefix i XPath-uttrycket.

Returer

Den första XmlNode som matchar XPath-frågan eller null om ingen matchande nod hittas.

Undantag

XPath-uttrycket innehåller ett prefix som inte har definierats i XmlNamespaceManager.

Exempel

I följande exempel väljs boken med det matchande ISBN-värdet.

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

I exemplet används filen , booksort.xmlsom indata.


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

Kommentarer

XPath-uttryck kan innehålla namnområden. Namnområdesmatchning stöds med hjälp av XmlNamespaceManager. Om XPath-uttrycket innehåller ett prefix måste prefixet och namnområdets URI-par läggas till i XmlNamespaceManager.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om xml-koden innehåller ett standardnamnområde måste du fortfarande lägga till ett prefix och en namnområdes-URI i XmlNamespaceManager. Annars får du inte en vald nod. Mer information finns i Välj noder med XPath-navigering.

Om du till exempel har följande XML:

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

Följande C#-kod väljer den första boknoden:

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

Note

Ett vanligt problem när du formulerar XPath-uttryck är hur du inkluderar ett enda citattecken (') eller dubbla citattecken (") i uttrycket. Om du måste söka efter ett värde som innehåller ett enda citattecken måste du omsluta strängen med dubbla citattecken. Om du behöver söka efter ett värde som innehåller ett dubbelt citattecken måste du omsluta strängen med enkla citattecken.

Anta till exempel att du har följande XML:

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

Följande Visual Basic kod väljer ett element som innehåller enkla citattecken:

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)

Den här metoden är ett Microsoft-tillägg till dokumentobjektmodellen (DOM).

Se även

Gäller för