python - 如何将xml header 添加到dom对象

标签 python xml dom

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

希望清楚。

最佳答案

This doesn't seem to be part of the 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() 方法并没有 promise 以适当的方式序列化 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 :“如果没有外部标记声明,则独立文档声明没有意义”。在我看来,您可以安全地完全忽略它。

关于python - 如何将xml header 添加到dom对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982887/

相关文章:

javascript - Duplicate DOM node jQuery(未引用)

python - 如何加速 Pandas 中的最近搜索(可能通过向量化代码)

python - Matplotlib 中三角形边框的问题

xml - XPath 或 XML 内容中的上下文概念是什么

c# - 如何从 XmlDocument 中选择具有 XML 命名空间的 XML 节点?

javascript - 使用 javascript 将 "id"添加到 &lt;input&gt; 标签中

javascript - 无法从脚本中找到元素

python - 通过索引创建有序矩阵

python - 为什么 globals() 在迭代期间改变大小?

asp.net - XML: namespace 前缀声称未声明,但实际上它是