Xpath根据td元素的位置选择元素

时间:2016-06-28 14:00:51

标签: html python-2.7 xpath lxml

下午好,今天我收到了一份要解析的HTML文档。

<!DOCTYPE html>
<html>
<body>

<table name="test" style="width:100%">
  <tr>
    <th>First name</th>
    <th>Last name</th>
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td>
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>
    <td>80</td>
  </tr>
</table>

</body>
</html>

基本上,它是一个非常简单的表格。我知道如何使用python和lxml解析这样的文档,并且我还设法在这种文档中检索我需要的大部分信息。

尽管如此,我有一些麻烦来获得与td元素具有相同position()的th元素的文本值。

到目前为止我做了什么:

使用一个像我那样的xpath我检索所有的td元素:

/html/body/table[@name='test']/tr/td

然后我将另一个xpath应用于每个元素以获得正确的元素。

我正在使用类似的东西:

./ancestor::table/tr/th[position()=count(./preceding-sibling::td)+1]

尽管如此,这不起作用,我的count函数返回0.我想我给出的路径(./preceding-sibling::td)是指th / preceding-sibling :: td。因此,如果没有td元素存在于与th相同的行中,则count函数返回0.我想要引用td元素而不是查询。

但我不知道该怎么做,我在该主题上找到的唯一好答案(xpath: find table cell with same position in different row)是基于用户知道要查找的td的标识符这一事实。我只是不能在我的xpath中硬编码td文本值。

有没有办法只使用xpath?

感谢您提供的任何帮助。

编辑:

Current node vs. Context node in XSLT/XPath?

根据该答案,我的xpath正在选择上下文节点,在我的例子中是 th 元素。我需要的是选择当前节点,这是我应用该段代码的 td 元素:

lxmlelement.xpath('./ancestor::table/tr/th[position()=count(./preceding-sibling::td)+1]')

0 个答案:

没有答案