我有一些 XML,我想在文本之前插入一个新元素。
我尝试过:
from lxml import etree
xml = "<root><foo>some text</foo></root>"
root = etree.fromstring(xml)
root.find("foo")
foo.insert(0, etree.Element("bar"))
etree.tostring(foo)
结果是
<foo>some text<bar/></foo>
当我满怀希望的时候
<foo><bar/>some text</foo>
请记住,
foo
元素实际上可能非常复杂。
我能带的最好的是
def insert_before(elem, child):
elem.insert(0, child)
child.tail, elem.text = elem.text, None
但是 API 中是否有我遗漏的函数或参数?
问题很老了,但对于那些为此苦苦挣扎的人来说。
from lxml import etree
from lxml.html import builder as E
# example 1
label = E.LABEL('my label')
bar = etree.Element('bar')
label.insert(0, bar)
bar.tail = label.text
label.text = None
print(etree.tostring(label, encoding="unicode"))
# output => <label><bar/>my label</label>
# example 2
bar = etree.Element('bar')
bar.tail = 'my label'
label = E.LABEL(bar)
print(etree.tostring(label, encoding="unicode"))
# output => <label><bar/>my label</label>