http://technet.microsoft.com/zh-cn/library/h0hw012b.aspx
选择匹配 XPath 表达式的第一个 XmlNode。 XPath 表达式中的任何前缀都使用提供的 XmlNamespaceManager 进行解析。
Public Function SelectSingleNode ( _ xpath As String, _ nsmgr As XmlNamespaceManager _ ) As XmlNode
public XmlNode SelectSingleNode( string xpath, XmlNamespaceManager nsmgr )
public:
XmlNode^ SelectSingleNode(
String^ xpath,
XmlNamespaceManager^ nsmgr
)
member SelectSingleNode :
xpath:string *
nsmgr:XmlNamespaceManager -> XmlNode
异常 | 条件 |
---|---|
XPathException | XPath 表达式包含 XmlNamespaceManager 中没有定义的前缀。 |
XPath 表达式可以包含命名空间。 使用 XmlNamespaceManager 支持命名空间解析。 如果 XPath 表达式包含前缀,则必须将前缀和命名空间 URI 对添加到 XmlNamespaceManager 中。
注意 |
---|
如果 XPath 表达式不包含前缀,则假定命名空间 URI 为空命名空间。 如果 XML 包含默认命名空间,则您仍必须将前缀和命名空间 URI 添加到 XmlNamespaceManager 中;否则将得不到选定的节点。 有关更多信息,请参见 使用 XPath 导航选择节点。 |
例如,如果您有以下 XML:
<bookstore xmlns="http://www.lucernepublishing.com"> <book> <title>Pride And Prejudice</title> </book> </bookstore>
下面的 C# 代码选择第一个书节点:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com"); XmlNode book = doc.SelectSingleNode("//ab:book", nsmgr);
注意 |
---|
使用公式表示 XPath 表达式时的一个常见问题是如何在表达式中包含单引号 (') 或双引号 (")。 如果确实要搜索包含单引号的值,则必须用双引号将该字符串括起来。 如果需要搜索包含双引号的值,则必须用单引号将该字符串括起来。 |
例如,假设您有以下 XML:
<bookstore xmlns="http://www.lucernepublishing.com"> <book> <title>'Emma'</title> </book> </bookstore>
下面的 Visual Basic 代码选择一个包含单引号的元素:
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 扩展。
下面的示例选择具有匹配的 ISBN 值的书。
Imports System 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
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); } }
#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 ); }
该示例使用文件 booksort.xml 作为输入。
<?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>