XPath函数,返回节点下的整个子树

时间:2013-06-06 22:26:35

标签: xpath

假设我的部分文件是

<div>
  <b>Hello,</b> world!
</div>
<div>
  <span>
    <b>This</b> is a <b>wonderful</b> day!
  </span>
</div>

我想选择第一个div,即子节点等于<b>Hello,</b> world!的div,我该如何编写表达式。还有第二个怎么样?

当然我可以有一个复杂的表达式,如//div[text()[1] = ' world' and child::b[position()=1 and text='Hello,']],但如果子树变得有点复杂,复杂性会增长得非常快。

理想情况下,如果有一个函数subtreeequals返回子树并分别比较两个树,那么我可以简单地写equals(subtree(), '<span><b>This</b> is a <b>wonderful</b> day!</span>')

有什么想法?有没有适合我需要的功能?感谢。

1 个答案:

答案 0 :(得分:0)

如果您想在文档中找到第一个div,请使用/descendant::div[1] - 或 - (//div)[1] - 注意这些内容,他们需要在此处获得正确的行为。

比较两个元素是一个更复杂的问题。 XPath 1中没有内置任何内容。某些环境将支持XPath 2,它定义deep-equal() - 请参阅http://www.w3.org/TR/2005/CR-xpath-functions-20051103/#func-deep-equal