【发布时间】:2014-03-07 01:34:31
【问题描述】:
我正在练习编写一些 XPath 查询,但遇到了一个问题。以下是我正在使用的示例文档:
<dept-db>
<dept>
<name>HR</name>
<emp>
<name>John</name>
<country>USA</country>
</emp>
<emp>
<name>Chris</name>
<country>USA</country>
</emp>
</dept>
<dept>
<name>Technology</name>
<emp>
<name>Oliver</name>
<country>UK</country>
</emp>
<emp>
<name>Emily</name>
<country>USA</country>
</emp>
</dept>
</dept-db>
我想要实现的是检索其国家在文档中出现两次以上的所有员工。我从一个更简单的查询开始,即应该找到重复的查询:
<!-- language: lang-xsl -->
doc("emp.xml")//emp[preceding::emp/country=./country or following::emp/country=./country]
虽然它返回所有员工(显然 Oliver 不应该在结果中列出)。
我是 XPath 的新手,不太确定我是否了解点 '.' 的概念。说明符正确。我希望上述查询的行为如下:遍历 emp 节点集,并检查在文档中当前节点上方和下方出现的节点中是否存在具有相同国家/地区的员工。
感谢您的解释(应用点说明符来执行 GROUP BY 类型的查询)并帮助使查询正常工作(除非使用单个路径表达式是不可能的?)。如果重要的话,我会使用 eXide(eXist-db 2.1 的一部分)和 XQuery 3.0 来执行查询。
【问题讨论】: