Extensions.XPathEvaluate 方法

定义

计算 XPath 表达式。Evaluates an XPath expression.

重载

XPathEvaluate(XNode, String)

计算 XPath 表达式。Evaluates an XPath expression.

XPathEvaluate(XNode, String, IXmlNamespaceResolver)

计算 XPath 表达式,使用指定的 IXmlNamespaceResolver 解析命名空间前缀。Evaluates an XPath expression, resolving namespace prefixes using the specified IXmlNamespaceResolver.

注解

虽然未在 XML XPath 语言1.0 建议中指定返回集合的顺序,但此扩展方法以文档顺序返回节点。Although the ordering of returned collections is not specified in the XML XPath Language 1.0 Recommendation, this extension method returns nodes in document order.

请注意,即使使用反向轴(如 preceding-siblingancestor-or-self),也会以文档顺序返回节点。Note that nodes are returned in document order even when you use a reverse axis, such as preceding-sibling or ancestor-or-self.

XPathEvaluate(XNode, String)

计算 XPath 表达式。Evaluates an XPath expression.

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

参数

node
XNode

一个 XNode,XPath 表达式将在其上计算。The XNode on which to evaluate the XPath expression.

expression
String

一个包含 XPath 表达式的 StringA String that contains an XPath expression.

返回

一个可以包含 booldoublestringIEnumerable<T> 的对象。An object that can contain a bool, a double, a string, or an IEnumerable<T>.

示例

下面的示例创建一个包含特性的小型 XML 树,然后使用 XPathEvaluate 方法检索特性。The following example creates a small XML tree with an attribute, then uses the XPathEvaluate method to retrieve the attribute.

  
                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())  

该示例产生下面的输出:This example produces the following output:

a="value"  

注解

如果集合是元素或属性的枚举,则可以使用 Cast 运算符来获取 XElementXAttribute的集合。If the collection is an enumeration of elements or attributes, you can use the Cast operator to get a collection of XElement or XAttribute.

虽然未在 XML XPath 语言1.0 建议中指定返回集合的顺序,但此扩展方法以文档顺序返回节点。Although the ordering of returned collections is not specified in the XML XPath Language 1.0 Recommendation, this extension method returns nodes in document order.

请注意,即使使用反向轴(如 preceding-siblingancestor-or-self),也会以文档顺序返回节点。Note that nodes are returned in document order even when you use a reverse axis, such as preceding-sibling or ancestor-or-self.

XPathEvaluate(XNode, String, IXmlNamespaceResolver)

计算 XPath 表达式,使用指定的 IXmlNamespaceResolver 解析命名空间前缀。Evaluates an XPath expression, resolving namespace prefixes using the specified 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);
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

参数

node
XNode

一个 XNode,XPath 表达式将在其上计算。The XNode on which to evaluate the XPath expression.

expression
String

一个包含 XPath 表达式的 StringA String that contains an XPath expression.

resolver
IXmlNamespaceResolver

一个用于解析 XPath 表达式中命名空间前缀的 IXmlNamespaceResolverA IXmlNamespaceResolver for the namespace prefixes in the XPath expression.

返回

一个包含表达式计算结果的对象。An object that contains the result of evaluating the expression. 该对象可以为 booldoublestringIEnumerable<T>The object can be a bool, a double, a string, or an IEnumerable<T>.

示例

下面的示例创建一个包含命名空间的 XML 树。The following example creates an XML tree that contains a namespace. 它使用 XmlReader 来读取 XML 文档。It uses an XmlReader to read the XML document. 然后获取 XmlNameTable 中的 XmlReaderXmlNamespaceManager 中的 XmlNameTableIt then gets an XmlNameTable from the XmlReader, and an XmlNamespaceManager from the XmlNameTable. 它在选择元素时使用 XmlNamespaceManagerIt uses the XmlNamespaceManager when selecting an element.

  
                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)  

该示例产生下面的输出:This example produces the following output:

aw:Att="attdata"  

注解

您可以使用此方法来计算包含命名空间前缀的 XPath 表达式。You can use this method to evaluate XPath expressions that contain namespace prefixes.

虽然未在 XML XPath 语言1.0 建议中指定返回集合的顺序,但此扩展方法以文档顺序返回节点。Although the ordering of returned collections is not specified in the XML XPath Language 1.0 Recommendation, this extension method returns nodes in document order.

请注意,即使使用反向轴(如 preceding-siblingancestor-or-self),也会以文档顺序返回节点。Note that nodes are returned in document order even when you use a reverse axis, such as preceding-sibling or ancestor-or-self.

适用于