XmlNode.SelectSingleNode XmlNode.SelectSingleNode XmlNode.SelectSingleNode XmlNode.SelectSingleNode Method

定義

選取符合 XPath 運算式的第一個 XmlNodeSelects the first XmlNode that matches the XPath expression.

多載

SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String)

選取符合 XPath 運算式的第一個 XmlNodeSelects the first XmlNode that matches the XPath expression.

SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager)

選取符合 XPath 運算式的第一個 XmlNodeSelects the first XmlNode that matches the XPath expression. 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

範例

下列範例會傳回具有相符作者名稱的第一本書。The following example returns the first book with the matching author name. XmlNamespaceManager 會解析 XPath 運算式中的預設命名空間。The XmlNamespaceManager resolves the default namespace in the XPath expression.

#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

此範例會使用檔案(newbooks.xml)做為輸入。The example uses the file, newbooks.xml, as input.

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

備註

XPath 運算式可包含命名空間。XPath expressions can include namespaces. 命名空間解析可透過 XmlNamespaceManager 予以支援。Namespace resolution is supported using the XmlNamespaceManager. 如果 XPath 運算式包含前置詞,則必須將前置詞和命名空間 URI 配對新增至 XmlNamespaceManagerIf the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須將前置詞和命名空間 URI 新增至 XmlNamespaceManager;否則,您將不會取得任何已選取的節點。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. 如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation.

SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String)

選取符合 XPath 運算式的第一個 XmlNodeSelects the first XmlNode that matches the XPath expression.

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

參數

xpath
String String String String

XPath 運算式。The XPath expression. 請參閱 XPath 範例See XPath Examples.

傳回

符合 XPath 查詢的第一個 XmlNode,如果找不到符合的節點,則為 nullThe first XmlNode that matches the XPath query or null if no matching node is found.

例外狀況

XPath 運算式包含前置詞。The XPath expression contains a prefix.

範例

下列範例會變更第一名 Jane Austen 書籍的價格。The following example changes the price of the first Jane Austen book.

#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

此範例會使用檔案(booksort.xml)做為輸入。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>

備註

如果 XPath 運算式需要命名空間解析,您必須使用 SelectSingleNode 多載,其接受 XmlNamespaceManager 做為其引數。If the XPath expression requires namespace resolution, you must use the SelectSingleNode overload which takes an XmlNamespaceManager as its argument. @No__t-0 是用來解析命名空間。The XmlNamespaceManager is used to resolve namespaces.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須使用 XmlNamespaceManager,並在其中加入前置詞和命名空間 URI;否則,您將不會取得選取的節點。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 a selected node. 如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation.

注意

在運算式中包含單引號(')或雙引號(")時,常見的問題是在編寫 XPath 運算式。A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 如果您必須搜尋包含單引號的值,則必須以雙引號括住字串。If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 如果您需要搜尋包含雙引號的值,您必須以單引號括住字串。If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

例如,假設您有下列 XML:For example, suppose you have the following XML:

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

下列 Visual Basic 程式碼會選取包含單引號的元素:The following Visual Basic code selects an element that contains single quotes:

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

這個方法是檔物件模型(DOM)的 Microsoft 擴充功能。This method is a Microsoft extension to the Document Object Model (DOM).

另請參閱

SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager)

選取符合 XPath 運算式的第一個 XmlNodeSelects the first XmlNode that matches the XPath expression. 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。Any prefixes found in the XPath expression are resolved using the supplied 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

參數

xpath
String String String String

XPath 運算式。The XPath expression. 請參閱 XPath 範例See XPath Examples.

nsmgr
XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager

XmlNamespaceManager,用來解析 XPath 運算式中前置詞的命名空間。An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

傳回

符合 XPath 查詢的第一個 XmlNode,如果找不到符合的節點,則為 nullThe first XmlNode that matches the XPath query or null if no matching node is found.

例外狀況

XPath 運算式包含未定義於 XmlNamespaceManager 中的前置詞。The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

範例

下列範例會選取具有相符 ISBN 值的書籍。The following example selects the book with the matching ISBN value.

#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

此範例會使用檔案(booksort.xml)做為輸入。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>

備註

XPath 運算式可包含命名空間。XPath expressions can include namespaces. 命名空間解析可透過 XmlNamespaceManager 予以支援。Namespace resolution is supported using the XmlNamespaceManager. 如果 XPath 運算式包含前置詞,則必須將前置詞和命名空間 URI 配對新增至 XmlNamespaceManagerIf the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須將前置詞和命名空間 URI 新增至 XmlNamespaceManager;否則,您將不會取得選取的節點。If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get a node selected. 如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation.

例如,如果您有下列 XML:For example, if you had the following XML:

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

下列C#程式碼會選取第一個書籍節點:The following C# code selects the first book node:

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

注意

在運算式中包含單引號(')或雙引號(")時,常見的問題是在編寫 XPath 運算式。A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 如果您必須搜尋包含單引號的值,則必須以雙引號括住字串。If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 如果您需要搜尋包含雙引號的值,您必須以單引號括住字串。If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

例如,假設您有下列 XML:For example, suppose you have the following XML:

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

下列 Visual Basic 程式碼會選取包含單引號的元素: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")  
book = root.SelectSingleNode("descendant::ab:book[ab:title=""'Emma'""]", nsmgr)  

這個方法是檔物件模型(DOM)的 Microsoft 擴充功能。This method is a Microsoft extension to the Document Object Model (DOM).

另請參閱

適用於