【发布时间】:2016-01-11 12:44:54
【问题描述】:
我正在使用 XPATH 1.0 从 XML 文档中获取一些节点,该文档在根和具有属性的节点上使用默认命名空间。 attributeFormDefault = "qualified" 在架构上设置。
<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']
【问题讨论】: