如何组合两个XPATH查询以避免解析两次长XML?

时间:2013-06-10 23:02:16

标签: xml xpath xquery xpath-2.0

我有一个很长的本地XML文件:

<root>
  <div>this</div>
  <div>is</div>
  <div>a</div>
  ...
  <div>very</div>
  <div>long</div>
  <div>list</div>
</root>

我需要知道:

  1. th div元素的总数
  2. 元素“非常”的位置
  3. 我知道我可以通过启动这两个XPATH(2.0)查询来实现这一点:

    1.  count(/root/div)
    2.  index-of(/root/div,"very")
    

    但XML文件很长,所以我讨厌XML解析引擎在所有文件中传递两次。

    是否有更快的组合返回例如具有两个结果的数组,在文件中传递一次?

3 个答案:

答案 0 :(得分:1)

是什么让您认为必须解析XML文档两次才能运行两个XPath查询?我不知道您使用什么API来运行XPath,但我不知道有这种限制的API。

答案 1 :(得分:0)

简短的回答:不,或者至少我怀疑它。

答案很长:它可以在一次通过中完成,但只能通过调用XPath的任何方式完成。在伪代码中:

FIND ALL DIVS USING XPath(/root/div), ASSIGN TO x
VAR i = 0
VAR v = -1
LOOP THROUGH ALL x
    INCREMENT COUNTER i
    IF x' EQUALS 'very' AND v EQUALS -1
        v = i

答案 2 :(得分:0)

用XQUERY语言:

let $div := /root/div
return
<result>
<cnt>{count($div)}</cnt>
<v-index>{index-of($div, contains(., 'very'))}</v-index>
</result>