lxml.etree将元素插入到element.text中

时间:2015-08-11 21:03:11

标签: xml python-2.7 lxml elementtree

我的字符串中包含空的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 &lt;pb n="44"/&gt; bananas</text>
</root>

摆弄re.split()和etree的texttail我可以在<pb n="44"/>中插入我想要的子元素txt.text;但是,有时我在字符串中多次出现<pb/>元素,这使问题变得复杂:

>>> s1 = """foo bar <pb n="42"/> parrots like <pb n="43"/> eggs and spam"""

是否有一种简单的方法可以将这些元素插入到现有元素的text中,而无需使用texttail进行过多的调整?

1 个答案:

答案 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>