2016-12-16 6 views
0

とXMLエントリのうち、テキストを挿入するには、これが結果です:は、どのように私はlxml.etreeとxmlファイルを構築しetree.Element

<BigData> 
    <user> 
    <enum> 
     <tree>sometext</tree> 
    </enum> 
    </user> 
</BigData> 

私はエントリを入れて、これを思い付くしようとしています:

<BigData> 
    <user>**this_is_the_extra_text** 
    <enum> 
     <tree>sometext</tree> 
    </enum> 
    </user> 
</BigData> 

これはどのように行うのですか? user = SubElement(user、BigData).text = 'this_is_the_extra_text'を使用すると、エラーが発生します。 注:新しいxmlエントリではなく、プレーンテキストのみが必要です。

ありがとうございます!

+0

etreeモジュールには「コメント」メソッドがあります。それはあなたが探しているものですか? – iFlo

+0

いいえ私はコメントメソッドが<! - text - >を追加し、角括弧を必要としないと思います:/ – aprin

答えて

1

user<user>という要素を参照する変数であると仮定すると、最初の子としてテキストノードを追加するようにそのtextプロパティを設定するだけです。

これはデモ用のセットアップです:

>>> from xml.etree import ElementTree as ET 
>>> root = ET.Element('BigData') 
>>> user = ET.SubElement(root, 'user') 
>>> enum = ET.SubElement(user, 'enum') 
>>> print ET.tostring(root) 
<BigData><user><enum /></user></BigData> 

と次はuser.textを設定した後に出力されます。

>>> user.text = 'this_is_the_extra_text' 
>>> print ET.tostring(root) 
<BigData><user>this_is_the_extra_text<enum /></user></BigData> 

あなたが他の子要素の後にテキストノードを追加したい場合はしかし、(中テキストノードが最初の子になることはありません)、先行する要素の代わりにtailプロパティを設定する必要があります。たとえば、enum要素の後にテキストノードを追加すると、次のようになります。

>>> enum.tail = 'this_is_the_extra_text' 
>>> print ET.tostring(root) 
<BigData><user><enum />this_is_the_extra_text</user></BigData> 
+0

ありがとう、私は最後に.textを使用していました。大丈夫だ。 しかし、私は "pretty_print = True"最後に、私はタグのために1ライナーを取得します。どのようにそれを修正するための任意のアイデア? – aprin

+0

よくフォーマットされたXMLをPythonで印刷することは、私がまだ究極のすぐに使える解決策を知らないという古い問題です。 lxmlの 'pretty_print = True'とminidomの' toprettyprintxml'はそれぞれ独自の問題を持っています... – har07

+0

小さな印刷用の小さなライブラリを書くのに時間を費やす価値があるかもしれません。 – har07

関連する問題