gpt4 book ai didi

python - 删除某个子节点之后的子节点

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:53 28 4
gpt4 key购买 nike

我想删除一个元素内低于 <hr/> 的所有节点(包括文本)元素(包括 <hr/> )。

例如,这个:

<td class="one">
Some text
<a href="page1.html"/>
<br/>
Some more text
<br/>
<a href="page2.html"/>
<hr/>
Bottom text
<br/>
<a href="page3.html"/>
</td>

应该变成:

<td class="one">
Some text
<a href="page1.html"/>
<br/>
Some more text
<br/>
<a href="page2.html"/>
</td>

我有这个 XPath 可以找到 <hr/> 下面的所有元素:

./node()[ preceding-sibling::hr[not(following-sibling::hr)] ]

但是我不知道如何删除这些元素。我试着这样做:

xp = './node()[ preceding-sibling::hr[not(following-sibling::hr)] ]'
els = self.xpath(xp, td_el)
for el in els:
el.getparent().remove(el)

但它不适用于文本节点。

最好的方法是什么?谢谢。

最佳答案

尝试使用以下代码删除节点:

from lxml import etree, html

source = """<td class="one">
Some text
<a href="page1.html"/>
<br/>
Some more text
<br/>
<a href="page2.html"/>
<hr/>
Bottom text
<br/>
<a href="page3.html"/>
</td>"""
html = html.fromstring(source)
parent = html.xpath('//td')[0]
redundant = html.xpath('//hr/preceding-sibling::*[1]/following-sibling::*')

for node in redundant:
parent.remove(node)

print(etree.tostring(parent))

输出

<td class="one">
Some text
<a href="page1.html"/>
<br/>
Some more text
<br/>
<a href="page2.html"/>
</td>

关于python - 删除某个子节点之后的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com