我有一个html文件,里面有一些这样的div(很简单):
<div num="1" class="class1">
<div class="class1-text">
<span class="class2">
<span class="class3"> some chinese text </span>
some english text
</span>
</div>
</div>
我正在尝试通过删除包含lxml的span节点删除所有中文文本:
parser = et.XMLParser(remove_blank_text=True, recover=True)
documentXml=et.parse(html_FileName, parser)
for class1Node in documentXml.xpath('//div[@class="class1-text"]'):
chineseNode=class1Node.xpath('.//span[@class="class3"]')
chineseNode.getparent().remove(chineseNode)
但是我没有从xpath获得span class3节点,而是获得了span class2,所以我最终删除了所有内容(甚至是英文文本)。
如果我不解析lxml,我会得到解析错误(可能是中文字符问题或者是坏的HTML)。
答案 0 :(得分:1)
您可以尝试使用strip_elements()
功能,例如:
from lxml import etree as et
parser = et.XMLParser(remove_blank_text=True, recover=True)
documentXml=et.parse(html_FileName, parser)
for class1Node in documentXml.xpath('//div[@class="class1-text"]'):
chineseNode=class1Node.xpath('.//span[@class="class3"]')
et.strip_elements(chineseNode[0].getparent(), 'span', with_tail=False)
print(et.tostring(documentXml))
它产生:
b'<div num="1" class="class1"><div class="class1-text"><span class="class2">\n some english text\n </span></div></div>'
答案 1 :(得分:0)
您应该能够将xpath选择器简化为:
for chineseNode in documentXml.xpath("//div[@class='class1-text']//span[@class='class3']"):
chineseNode.getparent().remove(chineseNode)