我正在使用Python的xml.dom.minidom,但我认为这个问题对任何DOM解析器都有效。
我的原始文件在开头有这样的一行:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
这似乎不是dom的一部分,所以当我执行类似dom.toxml()的操作时,结果字符串在开头没有行。
如何添加?
示例outpupt:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root xmlns:aid="http://xxxxxxxxxxxxxxxxxx">
<Section>BANDSAW BLADES</Section>
</Root>
希望明确。
答案 0 :(得分: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()
不包含。您可能认为这是一个错误,但实际上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,因此没有外部定义的实体,因此该文档本质上已经是独立的。根据{{3}}:“如果没有外部标记声明,则独立文档声明没有意义”。在我看来,你可以安全地省略它。