我的字符串中包含空的xml元素,如下所示:
>>> s = """fizz buzz <pb n="44"/> bananas"""
使用etree.SubElement
方法将这些字符串分配给xml元素:
>>> from lxml import etree as et
>>> root = et.Element('root')
>>> txt = et.SubElement(root, 'text')
>>> txt.text = s
>>> et.dump(root)
<root>
<text>fizz buzz <pb n="44"/> bananas</text>
</root>
摆弄re.split()
和etree的text
和tail
我可以在<pb n="44"/>
中插入我想要的子元素txt.text
;但是,有时我在字符串中多次出现<pb/>
元素,这使问题变得复杂:
>>> s1 = """foo bar <pb n="42"/> parrots like <pb n="43"/> eggs and spam"""
是否有一种简单的方法可以将这些元素插入到现有元素的text
中,而无需使用text
和tail
进行过多的调整?
答案 0 :(得分:3)
您可以使输入字符串成为格式良好的XML文档(以text
为根元素)并使用fromstring()
将其解析为Element对象。然后将其附加到父母身上。
from lxml import etree as et
s1 = """foo bar <pb n="42"/> parrots like <pb n="43"/> eggs and spam"""
s2 = "<text>{0}</text>".format(s1)
text = et.fromstring(s2)
root = et.Element('root')
root.append(text)
et.dump(root)
输出:
<root>
<text>foo bar <pb n="42"/> parrots like <pb n="43"/> eggs and spam</text>
</root>