2016-07-22 2 views
1

я хотел бы построить следующий XML-элемент (для того, чтобы настроить номер рисунка форматирования):Python LXML: вставить текст в заданном положении относительно субэлементов

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

Как я могу указать положение текста относительно подэлементов?

ответ

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 
+0

Так 'tail' свойство каждого подэлемента отображения в XML как текст после подэлемента. Полезно знать, спасибо. – mmj

Смежные вопросы