在 XML 树中搜索特定文本并在下一个节点中提取文本

Posted

技术标签:

【中文标题】在 XML 树中搜索特定文本并在下一个节点中提取文本【英文标题】:Search for specific text in XML tree and extract text in next node 【发布时间】:2021-02-12 21:40:19 【问题描述】:

试图从www.currys.co.uk 那里获取智能手表的重量。该网站并未对所有产品采用相同的结构,因此为了获得每种产品的权重,我尝试使用 xpath 进行关键字搜索:

//text()[contains(.,'Weight')]

我可以得到文字“重量”,但我想得到的是下面node那个contains重量的实际值:

<tbody>
 <tr>
   <th scope = "row">Weight</th>
   <td> 26.7 g</td>
 <tr>
<body>

我正在寻找的是获取文本26.7 g。我尝试使用以下方法,但它似乎不起作用:

//text()[contains(.,'Weight')]//td

有什么建议吗?提前致谢。

【问题讨论】:

【参考方案1】:

你可以使用following-sibling::td:

from lxml import etree


txt = '''<tbody>
 <tr>
   <th scope = "row">Weight</th>
   <td> 26.7 g</td>
 </tr>
</tbody>'''

root = etree.fromstring(txt)

for td in root.xpath('//th[contains(., "Weight")]/following-sibling::td'):
    print(td.text)

打印:

 26.7 g

【讨论】:

工作出色。谢谢你。并且只是为了将来参考,为了获得前一个兄弟,我只是将上面的代码更改为“/preceding-sibling::td”? @sophods 不幸的是,XPATH 不支持搜索先前元素的函数。这是 CSS/Xpath 备忘单:devhints.io/xpath 但lxml 中有 .getparent() 函数 - 从那里你可以搜索所有兄弟姐妹。

以上是关于在 XML 树中搜索特定文本并在下一个节点中提取文本的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?

C++ 在文本文件中搜索特定字符串并返回该字符串所在的行号

如何在 Oracle SQL 中搜索特定的 XML 值?

在 ArrayList 中搜索特定对象

如何在 DataTable 中搜索特定记录?

在一个用 JSON 填充的 NSArray 中搜索特定的标题