【问题标题】:How to add xml header to dom object如何将xml标头添加到dom对象
【发布时间】:2010-10-20 22:38:59
【问题描述】:

我正在使用 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>

希望清楚。

【问题讨论】:

  • 最好举个例子说明输出应该是什么样子。

标签: python xml dom


【解决方案1】:

这似乎不是 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,因此不可能有外部定义的实体,因此该文档本质上已经是独立的。根据XML standard:“如果没有外部标记声明,则独立文档声明没有意义”。在我看来,您可以放心地完全省略它。

【讨论】:

  • 谢谢,这是一个比我更好的答案。能够完全省略该标题的好处。
猜你喜欢
  • 2012-08-11
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2016-02-22
  • 2015-11-28
  • 2017-04-28
相关资源
最近更新 更多