使用以下语句我得到了i = 1的valis响应,但是当我尝试i = 2等时,我得到一个超出范围的数组异常,任何指针都会很棒!
AutoPilot resultNode = new AutoPilot();
resultNode.selectXPath("/top/level[@sev='4']/item/title/text()[i]");
resultNode.bind(vn);
int z = resultNode.evalXPath();
System.out.println("TEST: "+vn.toString(z));
示例XML:
<top>
<level sev="4">
<item>
<title>gngsfjdsf</title>
<p1>2</p1>
<p2>2</p2>
</item>
<item>
<title>sdadad</title>
<p1>2</p1>
<p2>2</p2>
</item>
</level>
<level sev="3">
<item>
<title>3214125421</title>
<p1>2</p1>
<p2>1</p2>
</item>
<item>
<title>kjhkjtnjy</title>
<p1>1</p1>
<p2>2</p2>
</item>
</level>
</top>
答案 0 :(得分:3)
此:
/top/level[@sev='4']/item/title/text()
确实会返回两个值:
gngsfjdsf
sdadad
所以你只需要选择第二个,你可以使用括号来完成:
(/top/level[@sev='4']/item/title/text())[2]
仅返回
sdadad
失败的原因是.../text()[2]
尝试找到每个找到的节点的第二个文本节点,而不是整个第二个节点。
更好的解决方案是选择第二个item
节点,而不是尝试仅获取所有匹配节点的第二个text()
节点...
/top/level[@sev='4']/item[2]/title/text()
答案 1 :(得分:1)
你没有title元素的第二个文本节点。所以evalXPath()应该返回-1,它应该抛出一个超出范围的异常。