gpt4 book ai didi

python - 使用 lxml 注释掉一个元素

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

是否可以在注释中保留原始元素呈现的同时使用 python 的 lxml 注释掉 xml 元素?我尝试了以下

elem.getparent().replace(elem, etree.Comment(etree.tostring(elem, pretty_print=True)))

但是 tostring() 添加了命名空间声明。

最佳答案

被注释掉的元素的命名空间继承自根元素。演示:

from lxml import etree

XML = """
<root xmlns='foo'>
<a>
<b>AAA</b>
</a>
</root>"""

root = etree.fromstring(XML)
b = root.find(".//{foo}b")
b.getparent().replace(b, etree.Comment(etree.tostring(b)))
print etree.tostring(root)

结果:

<root xmlns="foo">
<a>
<!--<b xmlns="foo">AAA</b>
--></a>
</root>

操作命名空间通常比您想象的要难。参见 https://stackoverflow.com/a/31870245/407651 .

我的建议是使用BeautifulSoup ,实际上并不关心命名空间(soup.find('b') 返回 b 元素,即使它在 foo 命名空间)。

from bs4 import BeautifulSoup, Comment

soup = BeautifulSoup(XML, "xml")
b = soup.find('b')
b.replace_with(Comment(str(b)))
print soup.prettify()

结果:

<?xml version="1.0" encoding="utf-8"?>
<root mlns="foo">
<a>
<!--<b>AAA</b>-->
</a>
</root>

关于python - 使用 lxml 注释掉一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416111/

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