2013-04-09 17 views
5

所定の位置にタグを挿入します。lxmlのは:私はこれに似たxmlファイル、持って

<tag attrib1='I'> 
    <subtag1 subattrib1='1'> 
    <subtext>text1</subtext> 
    </subtag1> 
    <subtag3 subattrib3='3'> 
    <subtext>text3</subtext> 
    </subtag3> 
</tag> 

私は新しいサブ要素を挿入したいと思いますが、その結果は、この

<tag attrib1='I'> 
    <subtag1 subattrib1='1'> 
    <subtext>text1</subtext> 
    </subtag1> 
    <subtag2 subattrib2='2'> 
    <subtext>text2</subtext> 
    </subtag2> 
    <subtag3 subattrib3='3'> 
    <subtext>text3</subtext> 
    </subtag3> 
</tag> 
ようなものになるだろう

xmlファイルを追加できますが、最後に新しい要素が挿入されます。私はpython lxmlを強制的に与えられた位置に置くことができますか?

ありがとうございました!

答えて

10

あなたがaddnext()メソッドを使用することができます。

from lxml import etree 

XML= """ 
<tag attrib1='I'> 
    <subtag1 subattrib1='1'> 
    <subtext>text1</subtext> 
    </subtag1> 
    <subtag3 subattrib3='3'> 
    <subtext>text3</subtext> 
    </subtag3> 
</tag>""" 

parser = etree.XMLParser(remove_blank_text=True) 
tag = etree.fromstring(XML, parser) 

subtag1 = doc.find("subtag1") 
subtag2 = etree.Element("subtag2", subattrib2="2") 
subtext = etree.SubElement(subtag2, "subtext") 
subtext.text = "text2" 
subtag1.addnext(subtag2) # Add subtag2 as a following sibling of subtag1 

print etree.tostring(tag, pretty_print=True) 

出力:

<tag attrib1="I"> 
    <subtag1 subattrib1="1"> 
    <subtext>text1</subtext> 
    </subtag1> 
    <subtag2 subattrib2="2"> 
    <subtext>text2</subtext> 
    </subtag2> 
    <subtag3 subattrib3="3"> 
    <subtext>text3</subtext> 
    </subtag3> 
</tag> 

オルタナティブ:

subtag2 = etree.Element("subtag2", subattrib2="2") 
subtext = etree.SubElement(subtag2, "subtext") 
subtext.text = "text2" 
tag.insert(1, subtag2) # Add subtag2 as the second child (index 1) of the root element 
:ルート要素に insert()を使用
関連する問題