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')]
在 XPath 2.0 中,上述将抛出异常 不允许将多个项目的传递序列作为 contains()
的第一个参数,这是因为一个元素可能有多个属性。对于 XPath 2.0 兼容表达式,您可以这样做:
//*[@*[contains(.,'Search')]]
输出:
<Info FirstName="Search" LastName="Smith">
<Address City="Search"/>
</Info>
<Address City="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')]
在 XPath 2.0 中,上述将抛出异常 不允许将多个项目的传递序列作为 contains()
的第一个参数,这是因为一个元素可能有多个属性。对于 XPath 2.0 兼容表达式,您可以这样做:
//*[@*[contains(.,'Search')]]
输出:
<Info FirstName="Search" LastName="Smith">
<Address City="Search"/>
</Info>
<Address City="Search"/>