2013-04-09 6 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 파일을 추가 할 수 있지만 그 끝에 새 요소가 삽입됩니다. 어떻게 그것을 파이썬 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()를 사용