Xpath 通配符搜索

Xpath wildcard search

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

示例:

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

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

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

Xpath 查询应该return 信息节点和地址节点。但是,它只有 return 个节点。

假设您使用的是 XPath 1.0,您的 XPath 应该如您所料返回 Info 节点和 Address 节点。请参阅以下 link 中的在线演示(单击 'test' 按钮执行 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"/>