2

我用 Python 的 dom minidom 库创建了一个 xml 文件。但是我想创建没有序言的 xml 文件<?xml version="1.0"?>。我用doc.writexml()请你能给我一些线索吗?

4

1 回答 1

2

你不能直接这样做。但是有两种 hacky 方法可以做到这一点。

首先,剥离它并不难。例如:

xml = x.toxml()
with open('foo.xml', 'w') as f:
    f.write(xml.partition('>')[2])

或者,如果您不想在内存中生成整个字符串,您可以编写一个文件包装器来吞下 prolog:

class SkipFirstWriter(object):
    def __init__(self, f):
        self.f = f
        self.firstline = True
    def write(self, buf):
        if self.firstline:
            if '>' in buf:
                self.f.write(buf.partition('>')[2])
                self.firstline = False
        else:
            self.f.write(buf)
with open('foo.xml', 'w') as f:
    skipper = SkipFirstWriter(f)
    x.writexml(skipper)

显然,吞下“直到第一个>”是检测 XML prolog 的一种有点笨拙的方法……但它确实有效。在现实生活中的代码中,我可能会添加一条注释来解释这有效,以及为什么,但要使用它。

或者,您可以依靠 document-without-prolog 是文档的第一个子项这一事实,并执行以下操作:

with open('foo.xml', 'w') as f:
    x.firstChild.writexml(f)
于 2013-03-04T23:58:46.773 回答