使用 lxml 在文本前添加元素

问题描述 投票:0回答:1

我有一些 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 中是否有我遗漏的函数或参数?

python lxml
1个回答
0
投票

问题很老了,但对于那些为此苦苦挣扎的人来说。

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>
© www.soinside.com 2019 - 2024. All rights reserved.