在XPath查询结果中保留重复项

时间:2015-03-25 00:52:18

标签: xml xpath duplicates

考虑以下XML示例:

<books category="cat1">
   <book id="1" ... />
   <book id="2" ... />
   <book id="3" ... />
</books>

如果我使用XPath查询/books/book/parent::*/@category我应该收到 仅限一行:

cat1

但是,如何修改XPath查询以返回

cat1
cat1
cat1

(意思是我想保留所有副本)。

2 个答案:

答案 0 :(得分:3)

XPath中的“/”运算符会自动删除重复项。

在XPath 1.0中,您的要求存在根本性的困难:数据模型中唯一支持的复合值是节点集,而节点集(正在设置)不能包含重复项。所以没有包含重复节点的值,因此没有表达会产生这样的结果。

答案 1 :(得分:2)

XPath 2.0 中,您可以使用for循环:

for  $book in /books/book return $book/parent::*/@category