如何为DOM对象添加XML头部

3 投票
1 回答
6193 浏览
提问于 2025-04-16 05:49

我在使用Python的xml.dom.minidom,不过我觉得这个问题对任何DOM解析器来说都是适用的。

我的原始文件开头有一行像这样的内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

这似乎不是DOM的一部分,所以当我执行类似dom.toxml()的操作时,生成的字符串开头没有这一行。

我该怎么添加它呢?

示例输出:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root xmlns:aid="http://xxxxxxxxxxxxxxxxxx">
<Section>BANDSAW BLADES</Section>
</Root>

希望这样能让你明白。

1 个回答

2

这似乎不是DOM的一部分。

XML声明本身并不会有自己的节点,但在Document对象中声明的属性是可以看到的:

>>> doc= minidom.parseString('<?xml version="1.0" encoding="utf-8" standalone="yes"?><a/>')
>>> doc.encoding
'utf-8'
>>> doc.standalone
True

序列化文档时应该包括声明中的standalone="yes"部分,但toxml()方法并没有做到。你可以把这看作是一个bug,但实际上toxml()方法并没有承诺以合适的方式序列化XML声明。(比如,除非你特别要求,否则你不会得到encoding。)

你可以自己来写这个文档:

xml= []
xml.append('<?xml version="1.0" encoding="utf-8" standalone="yes"?>')
for child in doc.childNodes:
    xml.append(child.toxml())

但是你真的需要在这里加上XML声明吗?你使用的是默认版本和编码,而且由于没有DOCTYPE,所以也就没有外部定义的实体,因此这个文档本质上已经是独立的。根据XML标准:“如果没有外部标记声明,独立文档声明就没有意义。”在我看来,你可以完全省略它。

撰写回答