Python lxml:在给定位置插入标签
我有一个xml文件,类似于:Python lxml:在给定位置插入标签,python,lxml,Python,Lxml,我有一个xml文件,类似于: <tag attrib1='I'> <subtag1 subattrib1='1'> <subtext>text1</subtext> </subtag1> <subtag3 subattrib3='3'> <subtext>text3</subtext> </subtag3> </tag> 文本1 文本3 我
<tag attrib1='I'>
<subtag1 subattrib1='1'>
<subtext>text1</subtext>
</subtag1>
<subtag3 subattrib3='3'>
<subtext>text3</subtext>
</subtag3>
</tag>
文本1
文本3
我想插入一个新的子元素,结果如下
<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>
文本1
文本2
文本3
我可以附加xml文件,但最后会插入新元素。如何强制python lxml将其置于给定位置
谢谢你的帮助 您可以使用以下方法:
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 = tag.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