如何在XPath中获取命名空间名称?

时间:2013-11-09 16:35:35

标签: xpath exist-db

我有这个.xml文件

<root xmlns:h="http://www.w3.org/TR/html4/"
      xmlns:f="http://www.w3.org/TR/html4/">

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

 <f:table>
  <f:tr>
    <f:td>Red</f:td>
    <f:td>Yellow</f:td>
  </f:tr>
</f:table>

</root>

我如何才能获得具有指定命名空间的元素? 例如,我想只检索'h'命名空间中的元素。 我怎么才能得到它?在exists-db中,'namespace ::'轴不再有效

2 个答案:

答案 0 :(得分:0)

尝试在谓词中使用in-scope-prefixes()函数:

//*[in-scope-prefixes(.)='h']

答案 1 :(得分:0)

在评论中,您会显示一个解析来自name()的返回值的解决方案:

//*[substring-before(name(), ":")='h']

有一种更简单的方法可以获取映射到h前缀的名称空间中的所有元素:

//h:*

注意:当我第一次测试时,我正在返回文档中的所有元素。那是因为你的两个前缀都映射到相同的命名空间:

xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3.org/TR/html4/"

你也应该解决这个问题。