Xpath通配符搜索

时间:2015-12-15 11:04:30

标签: xml xpath wildcard

我想使用xpath查询在所有节点和特定文本的所有属性中进行搜索。

示例:

<Employee>
  <Id>1</Id>
  <Info FirstName="Search" LastName="Smith">
    <Address City="Search"/>
  </Info>
</Employee>

我目前正在使用以下xpath查询:

var nodes = xmlConfig.SelectNodes("//*[contains(@*,'Search')]");

Xpath查询应该返回Info节点和Address节点。但是,它只返回一个节点。

1 个答案:

答案 0 :(得分:1)

假设您正在使用XPath 1.0,您的XPath应该按预期返回Info节点和Address节点。请参阅以下链接中的在线演示(单击“测试”按钮以执行XPath):

//*[contains(@*,'Search')]

<强> xpathtester xpath 1.0 demo

在XPath 2.0中,上面会抛出异常不允许多个项目的传递序列作为contains() 的第一个参数,而这是因为一个元素可能有多个一个属性。对于XPath 2.0兼容表达式,您可以这样做:

//*[@*[contains(.,'Search')]]

<强> xpathtester xpath 2.0 demo

输出

<Info FirstName="Search" LastName="Smith">
    <Address City="Search"/>
  </Info>

<Address City="Search"/>