Python/ElementTree: 不使用命名空间写入文件

8 投票
2 回答
3023 浏览
提问于 2025-04-16 18:08

我正在尝试将一个ElementTree对象保存到磁盘上。其他一切都正常,但输出的文件看起来是这样的:

<html:html lang="en-US" xml:lang="en-US" xmlns:html="http://www.w3.org/1999/xhtml">
<html:head>
<html:title>vocab</html:title>
<html:style type="text/css"> ...

由于它包含了html:命名空间的信息,浏览器无法正确显示它。

我该如何让etree保存一些html到磁盘上,而不带html:命名空间的信息呢?

这是我用来写入的代码:

with open('/path/to/file.html', mode='w', encoding='utf-8') as outfile:
mypage.write(outfile)

谢谢!

2 个回答

9

我一直在使用这个变通的方法:

from xml.etree import ElementTree as ET
ET.register_namespace('', 'http://www.w3.org/1999/xhtml')

这样在输出的时候,html: 前缀就会被空格替换掉。

2

好吧,我已经让它工作了,不过是用了一种比较绕的方法。

我先用 etree.tostrng() 得到一个树的字符串,然后用 re.sub('html:', '', thetext) 来去掉一些命名空间的信息。最后,我就像平常一样把这个字符串写入磁盘。

撰写回答