Udostępnij za pośrednictwem


XmlNode.SelectSingleNode Metoda

Definicja

Wybiera pierwszy XmlNode element zgodny z wyrażeniem XPath.

Przeciążenia

SelectSingleNode(String)

Wybiera pierwszy XmlNode element zgodny z wyrażeniem XPath.

SelectSingleNode(String, XmlNamespaceManager)

Wybiera pierwszy XmlNode element zgodny z wyrażeniem XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu .

Przykłady

Poniższy przykład zwraca pierwszą książkę z pasującą nazwą autora. Element XmlNamespaceManager rozpoznaje domyślną przestrzeń nazw w wyrażeniu XPath.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( L"newbooks.xml" );
   
   // Create an XmlNamespaceManager to resolve the default namespace.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( L"bk", L"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( L"descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr );
   Console::WriteLine( book->OuterXml );
   return 0;
}
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

W przykładzie użyto pliku , newbooks.xmljako danych wejściowych.

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

Uwagi

Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManagerklasy .

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManagerobiektu . W przeciwnym razie nie zostaną wybrane żadne węzły. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.

SelectSingleNode(String)

Źródło:
XmlNode.cs
Źródło:
XmlNode.cs
Źródło:
XmlNode.cs

Wybiera pierwszy XmlNode element zgodny z wyrażeniem XPath.

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

Parametry

xpath
String

Wyrażenie XPath. Zobacz Przykłady XPath.

Zwraca

Pierwszy XmlNode , który pasuje do zapytania XPath lub null jeśli nie znaleziono pasującego węzła.

Wyjątki

Wyrażenie XPath zawiera prefiks.

Przykłady

Poniższy przykład zmienia cenę pierwszej książki Jane Austen.

#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" );
   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 );
}
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

W przykładzie użyto pliku , booksort.xmljako danych wejściowych.


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

Uwagi

Jeśli wyrażenie XPath wymaga rozpoznawania przestrzeni nazw, należy użyć SelectSingleNode przeciążenia, które przyjmuje XmlNamespaceManager jako argument. Służy do rozpoznawania XmlNamespaceManager przestrzeni nazw.

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz użyć XmlNamespaceManager i dodać do niego prefiks i identyfikator URI przestrzeni nazw. W przeciwnym razie nie otrzymasz wybranego węzła. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.

Uwaga

Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.

Załóżmy na przykład, że masz następujący kod XML:

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

Poniższy kod języka Visual Basic wybiera element zawierający pojedyncze cudzysłowy:

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

Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).

Zobacz też

Dotyczy

SelectSingleNode(String, XmlNamespaceManager)

Źródło:
XmlNode.cs
Źródło:
XmlNode.cs
Źródło:
XmlNode.cs

Wybiera pierwszy XmlNode element zgodny z wyrażeniem XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu .

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

Parametry

xpath
String

Wyrażenie XPath. Zobacz Przykłady XPath.

nsmgr
XmlNamespaceManager

Element XmlNamespaceManager służący do rozpoznawania przestrzeni nazw dla prefiksów w wyrażeniu XPath.

Zwraca

Pierwszy XmlNode , który pasuje do zapytania XPath lub null jeśli nie znaleziono pasującego węzła.

Wyjątki

Wyrażenie XPath zawiera prefiks, który nie jest zdefiniowany w elemecie XmlNamespaceManager.

Przykłady

Poniższy przykład wybiera książkę z zgodną wartością ISBN.

#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" );
   
   //Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew 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->Item[@bk:ISBN='1-861001-57-6']", nsmgr );
   Console::WriteLine( book->OuterXml );
}
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

W przykładzie użyto pliku , booksort.xmljako danych wejściowych.


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

Uwagi

Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManagerklasy .

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManagerobiektu . W przeciwnym razie nie zostanie wybrany węzeł. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.

Jeśli na przykład masz następujący kod XML:

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

Poniższy kod w języku C# wybiera pierwszy węzeł książki:

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

Uwaga

Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.

Załóżmy na przykład, że masz następujący kod XML:

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

Poniższy kod języka Visual Basic wybiera element zawierający pojedyncze cudzysłowy:

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)

Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).

Zobacz też

Dotyczy