lxml:在给定位置插入标签 [英] lxml: insert tag at a given position
本文介绍了lxml:在给定位置插入标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个与此类似的xml文件:
I have an xml file, similar to this:
<tag attrib1='I'>
<subtag1 subattrib1='1'>
<subtext>text1</subtext>
</subtag1>
<subtag3 subattrib3='3'>
<subtext>text3</subtext>
</subtag3>
</tag>
我想插入一个新的subElement,所以结果将是这样
I would like to insert a new subElement, so the result would be something like this
<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将其放置到给定位置?
I can append my xml file, but then the new elements will be inserted at the end. How can I force python lxml to put it into a given position?
感谢您的帮助!
推荐答案
您可以使用 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 = 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>
替代方法:在根元素上使用insert()
:
Alternative: use insert()
on the root element:
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
这篇关于lxml:在给定位置插入标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文