XmlNode.SelectSingleNode 方法

定义

选择匹配 XPath 表达式的第一个 XmlNodeSelects the first XmlNode that matches the XPath expression.

重载

SelectSingleNode(String)

选择匹配 XPath 表达式的第一个 XmlNodeSelects the first XmlNode that matches the XPath expression.

SelectSingleNode(String, XmlNamespaceManager)

选择匹配 XPath 表达式的第一个 XmlNodeSelects the first XmlNode that matches the XPath expression. XPath 表达式中的任何前缀都使用提供的 XmlNamespaceManager 进行解析。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 对添加到 XmlNamespaceManager中。If 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)

选择匹配 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

XPath 表达式。The XPath expression. 请参见 XPath 示例See XPath Examples.

返回

XmlNode

与 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. XmlNamespaceManager 用于解析命名空间。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)

选择匹配 XPath 表达式的第一个 XmlNodeSelects the first XmlNode that matches the XPath expression. XPath 表达式中的任何前缀都使用提供的 XmlNamespaceManager 进行解析。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

XPath 表达式。The XPath expression. 请参见 XPath 示例See XPath Examples.

nsmgr
XmlNamespaceManager

一个 XmlNamespaceManager,用于为 XPath 表达式中的前缀解析命名空间。An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

返回

XmlNode

与 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 对添加到 XmlNamespaceManager中。If 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).

另请参阅

适用于