我想使用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节点。但是,它只返回一个节点。
答案 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"/>