6

私はxmlファイルを持っており、Elementtreeを使用してxmlファイルに新しいタグを追加しました。処理前の私のxmlファイルは次のとおりです

<?xml version="1.0" encoding="utf-8"?>

<PackageInfo xmlns="http://someurlpackage">


<data ID="http://someurldata1">data1</data >
<data ID="http://someurldata2">data2</data >
<data ID="http://someurldata3">data3</data >
</PackageInfo>

次のpythonコードを使用して、新しいデータタグを追加し、それをxmlファイルに書き込みました

 tree = ET.ElementTree(xmlFile)
 root = tree.getroot()
 elem= ET.Element('data')
 elem.attrib['ID']="http://someurldata4"
 elem.text='data4'
 root[1].append(elem)
 tree = ET.ElementTree(root)
 tree.write(xmlFile)

しかし、結果のxmlファイルは<?xml version="1.0" encoding="utf-8"?>存在せず、ファイルは次のようになります

<PackageInfo xmlns="http://someurlpackage">
<data ID="http://someurldata1">data1</data >
<data ID="http://someurldata2">data2</data >
<data ID="http://someurldata3">data3</data >
</PackageInfo>

行をハードコーディングするのではなく、xml ヘッダーを含める方法はありますか

4

3 に答える 3

10

write宣言を出力するには、メソッドにオプションの引数が必要なようです。

http://docs.python.org/library/xml.etree.elementtree.html#elementtree-elementtree-objects

tree.write(xmlfile,xml_declaration=True)

私はそれほど精通していないのではないかと思いxml.etree.ElementTreeます。それはPythonリリース間のバリエーションです。

これが動作していlxml.etreeます:

>>> from lxml import etree
>>> sample = """<?xml version="1.0" encoding="utf-8"?>
... <PackageInfo xmlns="http://someurlpackage">
... <data ID="http://someurldata1">data1</data >
... <data ID="http://someurldata2">data2</data >
... <data ID="http://someurldata3">data3</data >
... </PackageInfo>"""
>>>
>>> doc = etree.XML(sample)
>>> data = doc.makeelement("data")
>>> data.attrib['ID'] = 'http://someurldata4'
>>> data.text = 'data4'
>>> doc.append(data)
>>> etree.tostring(doc,xml_declaration=True)
'<?xml version=\'1.0\' encoding=\'ASCII\'?>\n<PackageInfo xmlns="http://someurlpackage">\n<data ID="http://someurldata1">data1</data>\n<data ID="http://someurldata2">data2</data>\n<data ID="http://someurldata3">data3</data>\n<data ID="http://someurldata4">data4</data></PackageInfo>'
>>> etree.tostring(doc,xml_declaration=True,encoding='utf-8')
'<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<PackageInfo xmlns="http://someurlpackage">\n<data ID="http://someurldata1">data1</data>\n<data ID="http://someurldata2">data2</data>\n<data ID="http://someurldata3">data3</data>\n<data ID="http://someurldata4">data4</data></PackageInfo>'
于 2012-09-17T10:33:59.390 に答える
4

これを試して:::

tree.write(xmlFile, encoding="utf-8")
于 2012-09-17T13:02:29.737 に答える
0

python <=2.6を使用している場合ElementTree.write() にxml_declaration
パラメータ はありません

def write(self, file, encoding="us-ascii"): 
def _write(self, file,node, encoding, namespaces):

ここでlxml.etree
install lxml
サンプルを使用できます。

from lxml import etree
document = etree.Element('outer')
node = etree.SubElement(document, 'inner')
print(etree.tostring(document, xml_declaration=True))

ところで:
xml_declaration を記述する必要はないことがわかりまし
た XML 宣言ノードは必須ですか?

バージョンとエンコーディング (それぞれ 1.0 と UTF-8) の両方にデフォルトがあるため、ドキュメントを正常に読み取るために必要な XML 宣言はありません。

少なくとも、 AndroidManifest.xml に私が試した xml_declaration がない場合でも機能します
:-)

于 2015-07-09T06:52:14.130 に答える