2011-10-26 3 views
18

lxmlのetreeを使用しているXMLファイルがありますが、タグを追加するとかなり印刷されません。構文解析されたツリーにタグを追加すると、lxmlでかなりの印刷が失敗する

>>> from lxml import etree 
>>> root = etree.parse('file.xml').getroot() 
>>> print etree.tostring(root, pretty_print = True) 

<root> 
    <x> 
    <y>test1</y> 
    </x> 
</root> 

これまでのところとても良いです。しかし今すぐ

>>> x = root.find('x') 
>>> z = etree.SubElement(x, 'z') 
>>> etree.SubElement(z, 'z1').attrib['value'] = 'val1' 
>>> print etree.tostring(root, pretty_print = True) 

<root> 
    <x> 
    <y>test1</y> 
    <z><z1 value="val1"/></z></x> 
</root> 

これはもはやかなりです。また、z1タグを作成し、zタグを作成してz1を追加してから、xタグにzタグを追加して、「後方に」しようとしました。しかし、私は同じ結果を得る。

ファイルを解析せずに、すべてのタグを一度に作成すると、正しく印刷されます。だから私はそれがファイルを解析することと関係があると思う。

かなり印刷するにはどうすればよいですか?

答えて

30

これは、lxmlが空白をどのように処理するかに関係します。詳細については、lxml FAQを参照してください。この問題を解決するには

、次のようにファイルの読み込み一部を変更します。

parser = etree.XMLParser(remove_blank_text=True) 
root = etree.parse('file.xml', parser).getroot() 

私はそれをテストしていないが、それはこの変更にうまく自分のファイルをインデントする必要があります。

+1

これは機能しているようです。 FAQの質問を見たことがありますが、間違って読んでいると思います。私はあなたがそれに空白を含むテキストデータを持っているかどうかは問題ではないと言っていると思っていました。しかし、テキストデータを持つ要素があれば、それは重要ですね。迅速な修正をありがとう。 –

関連する問題