如何为DOM对象添加XML头部
我在使用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标准:“如果没有外部标记声明,独立文档声明就没有意义。”在我看来,你可以完全省略它。