要素ツリーを使用してXMLを作成しています。
XML宣言で始まる空のテンプレートファイルをコードに与えています<?xml version= "1.0"?>
。ETが変更を完了し、完成したXMLを書き込むと、宣言が削除され、ルートタグで始まります。どうすればこれを止めることができますか?
書き込み呼び出し:
ET.ElementTree(root).write(noteFile)
要素ツリーを使用してXMLを作成しています。
XML宣言で始まる空のテンプレートファイルをコードに与えています<?xml version= "1.0"?>
。ETが変更を完了し、完成したXMLを書き込むと、宣言が削除され、ルートタグで始まります。どうすればこれを止めることができますか?
書き込み呼び出し:
ET.ElementTree(root).write(noteFile)
ドキュメントによると:
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)
ElementTreeにはさまざまなバージョンがあります。それらのいくつかは議論を受け入れxml_declaration
ます、いくつかは受け入れません。
私がたまたま持っているものは持っていません。の場合にのみ、宣言を発行しencoding != 'utf-8'
ます。したがって、宣言を取得するには、を呼び出しますwrite(filename, encoding='UTF-8')
。