下午好,今天我收到了一份要解析的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]')