XPATH - 查询定义的结果顺序

时间:2012-10-06 11:27:20

标签: xpath

我有一个像这样的xpath表达式:

element[@attr="a"] | element[@attr="b"] | element[@attr="c"] | …这是一个»或«声明。那么我可以创建一个表达式来保证结果在查询中按顺序出现,即使元素在文档中以不同的顺序出现吗?

f.e。按此顺序的文档片段:

<doc>
    <element attr="c" />
    <element attr="b" />
    <element attr="a" />
    .
    .
    .
</doc>

并按如下顺序排列结果列表:

[0] <element attr="a" />
[1] <element attr="b" />
[2] <element attr="c" />
.
.
.

2 个答案:

答案 0 :(得分:4)

|运算符计算the union of its operands,而XPath 1.0只是得到一组节点,顺序是未定义的,尽管大多数XPath API然后按文档顺序返回结果或允许您说明哪个您想要的订单或订单是否重要(例如参见http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult)。

使用XPath 2.0,您将获得按文档顺序排序的节点序列,如果您需要使用逗号运算符而不是联合运算符即element[@attr="a"] , element[@attr="b"] , element[@attr="c"],则需要使用XPath 2.0。 p>

答案 1 :(得分:4)

  

我可以创建一个表达式来保证结果出现在   在查询中排序,即使元素出现在不同的中   在文件中订购?

  1. 不使用任何XPath 1.0引擎 - 它们按文档顺序返回生成的XmlNodeList。

  2. 使用XPath 2.0,可以使用逗号,运算符指定要返回的序列,如下所示:

    元素[@ attr =“a”],元素[@ attr =“b”],元素[@ attr =“c”]

  3. 最后,如果您受限于XPath 1.0实现,那么以所需顺序获取结果的一种方法是评估这三个XPath表达式:

    元素[@ ATTR = “一个”]

    元素[@ ATTR = “B”]

    元素[@ ATTR = “C”]

  4. 然后你可以先访问第一个结果,第二个结果 - 第二个和第三个结果 - 第三个结果。