85

を使用して Python で XML ドキュメントを生成していますElementTreeが、プレーンテキストに変換するときに関数にXML 宣言tostringが含まれていません。

from xml.etree.ElementTree import Element, tostring

document = Element('outer')
node = SubElement(document, 'inner')
node.NewValue = 1
print tostring(document)  # Outputs "<outer><inner /></outer>"

文字列に次の XML 宣言を含める必要があります。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

ただし、これを行う文書化された方法はないようです。

で XML 宣言をレンダリングするための適切な方法はありElementTreeますか?

4

11 に答える 11

131

を使用する方法がないように思われることに驚いていますElementTree.tostring()ElementTree.ElementTree.write()ただし、XML ドキュメントを偽のファイルに書き込むために使用できます。

from io import BytesIO
from xml.etree import ElementTree as ET

document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
et = ET.ElementTree(document)

f = BytesIO()
et.write(f, encoding='utf-8', xml_declaration=True) 
print(f.getvalue())  # your XML file, encoded as UTF-8

この質問を参照してください。それでも、「スタンドアロン」属性を自分で追加しないと取得できないと思います。

于 2013-03-12T09:36:37.797 に答える
32

lxmlを使用します(http://lxml.de/api.htmlを参照)。

次に、次のことができます。

from lxml import etree
document = etree.Element('outer')
node = etree.SubElement(document, 'inner')
print(etree.tostring(document, xml_declaration=True))
于 2013-03-12T08:50:45.607 に答える
2

ElementTreeパッケージを使用した最小限の作業例:

import xml.etree.ElementTree as ET

document = ET.Element('outer')
node = ET.SubElement(document, 'inner')
node.text = '1'
res = ET.tostring(document, encoding='utf8', method='xml').decode()
print(res)

出力は次のとおりです。

<?xml version='1.0' encoding='utf8'?>
<outer><inner>1</inner></outer>
于 2018-09-23T05:35:40.123 に答える
0

これは、印刷するだけの場合に機能します。ファイルに送信しようとするとエラーが発生します...

import xml.dom.minidom as minidom
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, SubElement, Comment, tostring

def prettify(elem):
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ")
于 2016-03-09T15:36:11.330 に答える