我想构建以下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>
如何指定相对于子元素的文本位置?
答案 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