我有一个很长的本地XML文件:
<root>
<div>this</div>
<div>is</div>
<div>a</div>
...
<div>very</div>
<div>long</div>
<div>list</div>
</root>
我需要知道:
我知道我可以通过启动这两个XPATH(2.0)查询来实现这一点:
1. count(/root/div)
2. index-of(/root/div,"very")
但XML文件很长,所以我讨厌XML解析引擎在所有文件中传递两次。
是否有更快的组合返回例如具有两个结果的数组,在文件中传递一次?
答案 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>