XmlNode.SelectSingleNode 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
选择与 XPath 表达式匹配的第一个 XmlNode 。
重载
| 名称 | 说明 |
|---|---|
| SelectSingleNode(String) |
选择与 XPath 表达式匹配的第一个 |
| SelectSingleNode(String, XmlNamespaceManager) |
选择与 XPath 表达式匹配的第一个 |
示例
以下示例返回具有匹配作者名称的第一本书。 解析 XmlNamespaceManager XPath 表达式中的默认命名空间。
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作为输入。
<?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 表达式可以包含命名空间。 使用 XmlNamespaceManager
注释
如果 XPath 表达式不包含前缀,则假定命名空间 URI 为空命名空间。 如果 XML 包含默认命名空间,则仍必须将前缀和命名空间 URI 添加到其中 XmlNamespaceManager;否则,将不会选择任何节点。 有关详细信息,请参阅 使用 XPath 导航选择节点。
SelectSingleNode(String)
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
选择与 XPath 表达式匹配的第一个 XmlNode 。
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
参数
- xpath
- String
XPath 表达式。
返回
第一个 XmlNode 匹配 XPath 查询或 null 找不到匹配节点。
例外
XPath 表达式包含前缀。
示例
以下示例更改了第一本简·奥斯滕书的价格。
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作为输入。
<?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 参数的重载。 用于 XmlNamespaceManager 解析命名空间。
注释
如果 XPath 表达式不包含前缀,则假定命名空间 URI 为空命名空间。 如果 XML 包含默认命名空间,则仍 XmlNamespaceManager 必须使用前缀和命名空间 URI;否则,将不会获得所选节点。 有关详细信息,请参阅 使用 XPath 导航选择节点。
注释
制定 XPath 表达式时,一个常见问题是如何在表达式中包含单引号(')或双引号(“)。 如果必须搜索包含单引号的值,则必须将字符串括在双引号中。 如果需要搜索包含双引号的值,则必须将字符串括在单引号中。
例如,假设有以下 XML:
<bookstore>
<book>
<title>'Emma'</title>
</book>
</bookstore>
以下Visual Basic代码选择包含单引号的元素:
book = root.SelectSingleNode("descendant::book[title=""'Emma'""]")
此方法是文档对象模型(DOM)的Microsoft扩展。
另请参阅
适用于
SelectSingleNode(String, XmlNamespaceManager)
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
- Source:
- XmlNode.cs
选择与 XPath 表达式匹配的第一个 XmlNode 。 使用提供 XmlNamespaceManager的任何前缀解析 XPath 表达式中找到的任何前缀。
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
参数
- xpath
- String
XPath 表达式。
- nsmgr
- XmlNamespaceManager
用于 XmlNamespaceManager 解析 XPath 表达式中前缀的命名空间。
返回
第一个 XmlNode 匹配 XPath 查询或 null 找不到匹配节点。
例外
XPath 表达式包含未在 . 中 XmlNamespaceManager定义的前缀。
示例
以下示例选择具有匹配 ISBN 值的书籍。
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作为输入。
<?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 表达式可以包含命名空间。 使用 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扩展。