我正在使用XPATH 1.0从XML文档中获取某些节点,该文档在根节点和具有属性的节点上使用默认名称空间。模式上设置了attributeFormDefault = "qualified"
。限定属性的xpath
<Transaction xmlns="http://example.com/transaction">
<someElement/>
<collection>
<value p0:Name="SomeName" xmlns:p0="http://example.com/transaction">some value</value>
<value p1:Name="SomeOtherName" xmlns:p1="http://example.com/transaction">some other value</value>
</collection>
<differentCollection>
<value p2:Name="SomeName" xmlns:p2="http://example.com/transaction">not this one</value>
</differentCollection>
</Transaction>
我的目的是得到/Transaction/collection/value[@Name='SomeName']
节点。
到目前为止我发现的唯一的解决办法似乎有点宽泛:
//*[@*='SomeName']
我还可以通过使用得到<value>
节点的整个集合:
//*[local-name()='value']
与命名空间限制在记住,是否有更清晰,更精确的方法来获得我之后的节点?第三方JavaScript库不是一个选项。
编辑
感谢您的快速反应。我会在这里指出,通过添加默认的命名空间前缀,解决了XPath查询表达式:
<t:Transaction xmlns:t="http://example.com/transaction">
现在我可以这样做:
/t:Transaction/t:collection/t:value[@t:Name='SomeName']