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 应该抛出越界异常。