在XML中通过XPath查找相邻节点

3

我有一个非常嵌套的结构(实际上是解析xhtml,所以很棘手),像这样:

<tr>
  <td>
    <font id="blah">
      stuff
    </font>
  </td>
</tr>
<tr>
  <td>
      more stuff
  </td>
</tr>

这在一个长表格中重复出现。我需要一个XPath表达式,它将选择第二个字体标签(或者更确切地说是它的text())。我正在查看preceding-sibling轴,但某些东西似乎不太对。

大致上应该是这样的(如果这很荒谬,请原谅,我的XPath有点生疏)

//tr[preceding-sibling::tr/td/font]/td/text()

好问题,+1。请看我的答案,其中包含一个选择所需文本节点的简短XPath表达式。 :) - Dimitre Novatchev
2个回答

5

用途:

(//tr/td[font])[2]/font/text()

这意味着:

选择文档中第二个具有font子元素并且本身是某些tr元素的子元素的td元素的所有font元素的文本节点子元素。

正如您所看到的,不需要使用preceeding轴。


哦,那也可以。我弄清楚了我的问题所在——它是在工作,但抓取了跟在第一个tr后面的所有行。我将其更改为//tr[preceding-sibling::tr[1]/td/font]/td/text(),这也起作用了。基本上需要指定我想要的是第一个行的前一个兄弟节点。不过你的方法更简单。 - kolosy

0

你的想法是正确的。如果你把里面的/b去掉,它应该可以正常工作。


是的 - /b 是一个复制/粘贴错误。它在实际表达式中是必需的,但在我的示例中不需要。 - kolosy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接