Extensions.XPathEvaluate 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
计算 XPath 表达式。
重载
XPathEvaluate(XNode, String) |
计算 XPath 表达式。 |
XPathEvaluate(XNode, String, IXmlNamespaceResolver) |
计算 XPath 表达式,使用指定的 IXmlNamespaceResolver 解析命名空间前缀。 |
注解
尽管 XML XPath 语言 1.0 建议中未指定返回集合的顺序,但此扩展方法按文档顺序返回节点。
请注意,即使在使用反向轴(如 preceding-sibling
或 ancestor-or-self
)时,也会按文档顺序返回节点。
XPathEvaluate(XNode, String)
计算 XPath 表达式。
public:
[System::Runtime::CompilerServices::Extension]
static System::Object ^ XPathEvaluate(System::Xml::Linq::XNode ^ node, System::String ^ expression);
public static object XPathEvaluate (this System.Xml.Linq.XNode node, string expression);
static member XPathEvaluate : System.Xml.Linq.XNode * string -> obj
<Extension()>
Public Function XPathEvaluate (node As XNode, expression As String) As Object
参数
返回
一个可以包含 bool
、double
、string
或 IEnumerable<T> 的对象。
示例
以下示例使用属性创建一个小型 XML 树,然后使用 XPathEvaluate 该方法检索该属性。
String xml = "<root a='value'/>";
XDocument d = XDocument.Parse(xml);
IEnumerable att = (IEnumerable)d.XPathEvaluate("/root/@a");
Console.WriteLine(att.Cast<XAttribute>().FirstOrDefault());
Dim d As XDocument = _
<?xml version='1.0'?>
<root a='value'/>
Dim att As IEnumerable = CType(d.XPathEvaluate("/root/@a"), IEnumerable)
Console.WriteLine(att.Cast(Of XAttribute)().FirstOrDefault())
该示例产生下面的输出:
a="value"
注解
如果集合是元素或属性的枚举,则可以使用Cast
运算符获取或XAttribute集合XElement。
尽管 XML XPath 语言 1.0 建议中未指定返回集合的顺序,但此扩展方法按文档顺序返回节点。
请注意,即使在使用反向轴(如 preceding-sibling
或 ancestor-or-self
)时,也会按文档顺序返回节点。
适用于
XPathEvaluate(XNode, String, IXmlNamespaceResolver)
计算 XPath 表达式,使用指定的 IXmlNamespaceResolver 解析命名空间前缀。
public:
[System::Runtime::CompilerServices::Extension]
static System::Object ^ XPathEvaluate(System::Xml::Linq::XNode ^ node, System::String ^ expression, System::Xml::IXmlNamespaceResolver ^ resolver);
public static object XPathEvaluate (this System.Xml.Linq.XNode node, string expression, System.Xml.IXmlNamespaceResolver? resolver);
public static object XPathEvaluate (this System.Xml.Linq.XNode node, string expression, System.Xml.IXmlNamespaceResolver resolver);
static member XPathEvaluate : System.Xml.Linq.XNode * string * System.Xml.IXmlNamespaceResolver -> obj
<Extension()>
Public Function XPathEvaluate (node As XNode, expression As String, resolver As IXmlNamespaceResolver) As Object
参数
- resolver
- IXmlNamespaceResolver
一个用于解析 XPath 表达式中命名空间前缀的 IXmlNamespaceResolver。
返回
一个包含表达式计算结果的对象。 该对象可以为 bool
、double
、string
或 IEnumerable<T>。
示例
以下示例创建包含命名空间的 XML 树。 它使用 XmlReader 来读取 XML 文档。 然后获取 XmlNameTable 中的 XmlReader 和 XmlNamespaceManager 中的 XmlNameTable。 它在选择元素时使用 XmlNamespaceManager 。
string markup =
@"<aw:Root xmlns:aw='http://www.adventure-works.com'>
<aw:Child1 aw:Att='attdata'>child one data 1</aw:Child1>
</aw:Root>";
XmlReader reader = XmlReader.Create(new StringReader(markup));
XElement root = XElement.Load(reader);
XmlNameTable nameTable = reader.NameTable;
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
namespaceManager.AddNamespace("aw", "http://www.adventure-works.com");
IEnumerable atts = (IEnumerable)root.XPathEvaluate("./aw:Child1/@aw:Att", namespaceManager);
IEnumerable<XAttribute> attList = atts.Cast<XAttribute>();
XAttribute att = attList.First();
Console.WriteLine(att);
Dim markup As XElement = _
<aw:Root xmlns:aw='http://www.adventure-works.com'>
<aw:Child1 aw:Att='attdata'>child one data 1</aw:Child1>
</aw:Root>
Dim reader As XmlReader = markup.CreateReader
Dim nameTable As XmlNameTable = reader.NameTable
Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(nameTable)
namespaceManager.AddNamespace("aw", "http://www.adventure-works.com")
Dim atts As IEnumerable = CType(markup.XPathEvaluate("./aw:Child1/@aw:Att", namespaceManager), IEnumerable)
Dim attList As IEnumerable(Of XAttribute) = atts.Cast(Of XAttribute)()
Dim att As XAttribute = attList.First()
Console.WriteLine(att)
该示例产生下面的输出:
aw:Att="attdata"
注解
可以使用此方法评估包含命名空间前缀的 XPath 表达式。
尽管 XML XPath 语言 1.0 建议中未指定返回集合的顺序,但此扩展方法按文档顺序返回节点。
请注意,即使在使用反向轴(如 preceding-sibling
或 ancestor-or-self
)时,也会按文档顺序返回节点。