Java 返回第n个孩子
使用下面的语句,我得到了I=1的valis响应,但是当尝试I=2等时,我得到了一个数组越界异常,任何指针都会很好Java 返回第n个孩子,java,xml,xpath,vtd-xml,Java,Xml,Xpath,Vtd Xml,使用下面的语句,我得到了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.
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>
gngsfjdsf
2.
2.
斯达达
2.
2.
3214125421
2.
1.
kjhkjtnjy
1.
2.
这是:
/top/level[@sev='4']/item/title/text()
确实返回两个值:
gngsfjdsf
sdadad
因此,您只需要选择第二个,您可以使用括号:
(/top/level[@sev='4']/item/title/text())[2]
只返回
sdadad
失败的原因是,../text()[2]
尝试查找每个已找到节点的第二个文本节点,而不是整个第二个节点
更好的解决方案是选择第二个
项
节点,而不是仅获取所有匹配节点的第二个文本()
/top/level[@sev='4']/item[2]/title/text()
这:
确实返回两个值:
gngsfjdsf
sdadad
因此,您只需要选择第二个,您可以使用括号:
(/top/level[@sev='4']/item/title/text())[2]
只返回
sdadad
失败的原因是,../text()[2]
尝试查找每个已找到节点的第二个文本节点,而不是整个第二个节点
更好的解决方案是选择第二个项
节点,而不是仅获取所有匹配节点的第二个文本()
/top/level[@sev='4']/item[2]/title/text()
标题元素没有第二个文本节点。因此evalXPath()应该返回一个-1,它应该抛出一个越界异常。您没有第二个文本节点用于title元素。所以evalXPath()应该返回一个-1,它应该抛出一个越界异常。对不起,我刚刚意识到我引用了I=1和I=2,然后在示例代码中对值进行了硬编码。我尝试获取第二个值时使用的表达式是/top/level[@sev='4']/item/title/text()[2],但在执行此操作时,我遇到了一个越界错误,尽管该项应该exist@Ben是的,我相信我在回答你真正的问题。我的两个表达式只匹配sdadad
,正如您所希望的那样。如果没有,请向我们展示1和2的预期输出。我想您希望1使用“gngsfjdsf”,2使用“sdadad”。@Lino在XPath中,数组是基于1的。[1] 获取第一个元素,[2]获取第二个元素。@Lino否!清楚地说“第一个位置是1”。当然!感谢您的第二个示例,您返回的项目[2]正是我要查找的。抱歉,刚刚意识到我引用了I=1和I=2,然后在示例代码中对值进行了硬编码。我尝试获取第二个值时使用的表达式是/top/level[@sev='4']/item/title/text()[2],但在执行此操作时,我遇到了一个越界错误,尽管该项应该exist@Ben是的,我相信我在回答你真正的问题。我的两个表达式只匹配sdadad
,正如您所希望的那样。如果没有,请向我们展示1和2的预期输出。我想您希望1使用“gngsfjdsf”,2使用“sdadad”。@Lino在XPath中,数组是基于1的。[1] 获取第一个元素,[2]获取第二个元素。@Lino否!清楚地说“第一个位置是1”。当然!感谢您的第二个示例,您返回的项[2]正是我要查找的。您需要测试evalXPath返回值为-1的条件。您需要测试evalXPath返回值为-1的条件。。