2

Python のライブラリ dom minidom で xml ファイルを作成します。ただし、プロローグなしでxmlファイルを作成したい<?xml version="1.0"?>。私は使っdoc.writexml()ています。リードをいくつか教えてください。

4

1 に答える 1

2

これを直接行うことはできません。しかし、それを行うには 2 つのハックな方法があります。

まず、剥がすのはそれほど難しくありません。例えば:

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

または、メモリ内に文字列全体を生成したくない場合は、プロローグを飲み込むファイル ラッパーを作成できます。

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 プロローグを検出するための少しハックな方法ですが、うまくいきます。実際のコードでは、これが機能することとその理由を説明するコメントをおそらく追加しますが、それを使用してください。

または、プロローグのないドキュメントがドキュメントの最初の子であるという事実に依存して、次のようにすることもできます。

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