2016-07-22 60 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

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

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