Return 第 n 个 child
Return nth child
使用下面的语句,我得到了 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>
这个:
/top/level[@sev='4']/item/title/text()
确实returns两个值:
gngsfjdsf
sdadad
所以你只需要select第二个,你可以用括号来完成:
(/top/level[@sev='4']/item/title/text())[2]
returns 仅
sdadad
你失败的原因是.../text()[2]
试图找到每个找到的节点的第二个文本节点,而不是整个第二个节点。
更好的解决方案是 select 第二个 item
节点,而不是尝试只获取所有匹配节点的第二个 text()
节点...
/top/level[@sev='4']/item[2]/title/text()
您没有标题元素的第二个文本节点。所以 evalXPath() 应该 return a -1 应该抛出越界异常。
使用下面的语句,我得到了 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>
这个:
/top/level[@sev='4']/item/title/text()
确实returns两个值:
gngsfjdsf
sdadad
所以你只需要select第二个,你可以用括号来完成:
(/top/level[@sev='4']/item/title/text())[2]
returns 仅
sdadad
你失败的原因是.../text()[2]
试图找到每个找到的节点的第二个文本节点,而不是整个第二个节点。
更好的解决方案是 select 第二个 item
节点,而不是尝试只获取所有匹配节点的第二个 text()
节点...
/top/level[@sev='4']/item[2]/title/text()
您没有标题元素的第二个文本节点。所以 evalXPath() 应该 return a -1 应该抛出越界异常。