10

要素ツリーを使用してXMLを作成しています。

XML宣言で始まる空のテンプレートファイルをコードに与えています<?xml version= "1.0"?>。ETが変更を完了し、完成したXMLを書き込むと、宣言が削除され、ルートタグで始まります。どうすればこれを止めることができますか?

書き込み呼び出し:

ET.ElementTree(root).write(noteFile)

4

2 に答える 2

23

ドキュメントによると:

write(file、encoding = "us-ascii"、xml_declaration = None、method = "xml")

要素ツリーをXMLとしてファイルに書き込みます。fileは、ファイル名、または書き込み用に開かれたファイルオブジェクトです。エンコーディング1は出力エンコーディングです(デフォルトはUS-ASCIIです)。xml_declarationは、XML宣言をファイルに追加する必要があるかどうかを制御します。決してFalseを使用しない、常にTrueを使用する、US-ASCIIまたはUTF-8でない場合のみNoneを使用する(デフォルトはNone)。メソッドは「xml」、「html」、または「text」のいずれかです(デフォルトは「xml」)。エンコードされた文字列を返します。

したがって、write(noteFile)エンコーディングがUS-ASCIIまたはUTF-8でなく、エンコーディングがUS-ASCIIである場合にのみ、XML宣言を書き込むように明示的に指示しています。したがって、宣言はありません。

あなたがこれをあまり読んでいないのなら、あなたの次の質問は「なぜ私のUnicodeが壊れているのか」になるだろうと思うので、両方を一度に修正しましょう:

ET.ElementTree(root).write(noteFile, encoding="utf-8", xml_declaration=True)
于 2012-09-27T01:18:14.860 に答える
6

ElementTreeにはさまざまなバージョンがあります。それらのいくつかは議論を受け入れxml_declarationます、いくつかは受け入れません。

私がたまたま持っているものは持っていません。の場合にのみ、宣言を発行しencoding != 'utf-8'ます。したがって、宣言を取得するには、を呼び出しますwrite(filename, encoding='UTF-8')

于 2013-11-02T03:09:42.103 に答える