如何根据lxml中的子项选择父项?

时间:2012-02-27 19:58:57

标签: python html parsing xpath lxml

我有这段代码:

<table cellspacing="1" cellpadding="1" border="0">
  <tbody>
   <tr>
    <td>Something else</td>
   </tr>
   <tr>
    <td valign="top">
      <a href="http://exact url">Something</a>
    </td>
    <td valign="top">Something else</td>
   </tr>
  </tbody>
</table>

我想找到Table但很难定位它(使用相同的代码就好了10次)。但我知道URL中的内容。我怎样才能获得父表?

4 个答案:

答案 0 :(得分:5)

如果t是此XML代码段的etree,那么您要查找的链接是

t.xpath('//a[@href = "http://exact url"]')[0]

从那里,您可以使用table轴转到ancestor

t.xpath('//a[@href = "http://exact url"]/ancestor::table')[-1]

答案 1 :(得分:2)

使用[]过滤表格。请注意,该属性是孙//table[.//@href="blah"]

//a[@href="blah"]//ancestor::table

答案 2 :(得分:2)

纯XPath解决方案。

使用

(//a[@href = "http://exact url"])[1]/ancestor::table[1]

这将选择XML文档中第一个table元素的第一个祖先a,其href属性为字符串"http://exact url"的字符串值。

这提供了正确的table元素,即使在存在嵌套表的情况下,每个表都有想要的a元素作为后代。在这种情况下,上面的XPath表达式选择最里面的这样的table - 与当前接受的答案相反,它获得最外层的 table祖先

答案 3 :(得分:1)

//a[@href="http://exact url"]/../../..

您需要3个..才能到达表格元素。