Python lxml:在相对于子元素的给定位置插入文本

时间:2016-07-22 07:12:28

标签: python xml lxml

我想构建以下XML元素(为了自定义图号格式):

<figcaption>
<span class="fignum">Figura 1.2</span> - Description of figure.
</figcaption>

但我不知道如何指定文字的位置。实际上,如果我在创建文本之前创建子元素,

import lxml.etree as et
fc = et.Element("figcaption")
fn = et.SubElement(fc, "span", {'class':'fignum'})
fn.text = "Figure 1.2"
fc.text = " - Description of figure."

我得到了一个不受欢迎的结果(文本位于子元素之前):

<figcaption>
 - Description of figure.<span class="fignum">Figure 1.2</span>
</figcaption>

如何指定相对于子元素的文本位置?

1 个答案:

答案 0 :(得分:3)

您需要使用tail元素的span属性:

from lxml import etree as et
fc = et.Element("figcaption")
fn = et.SubElement(fc, "span", {'class':'fignum'})
fn.text = "Figure 1.2"
fn.tail = " - Description of figure."

print(et.tostring(fc))
b'<figcaption><span class="fignum">Figure 1.2</span> - Description of figure.</figcaption>'

使用ElementTree,元素在元素内部具有text,在元素之外和之外具有tail

对于多个孩子,父级的text是第一个孩子之前的文本,元素中的所有其他文本都将分配给子级的tail

此问题的另一个答案的一些例子已被删除:

<elem>.text of elem</elem>.tail of elem
<elem>.text of elem<child1/><child2/></elem>.tail of elem
<elem>.text of elem<child1/>.tail of child1<child2/>.tail of child2</elem>.tail of elem
<elem>.text of elem<child1>.text of child1</child1>.tail of child1<child2/>.tail of child2</elem>.tail of elem