2010-05-05 40 views
4

我試圖輸出使用Python lxml的在LXML關閉標籤,無文本

但是一個XML文件,我注意到一兩件事,如果標籤沒有文本,它不會自行關閉。這方面的一個例子是:

root = etree.Element('document') 
rootTree = etree.ElementTree(root) 
firstChild = etree.SubElement(root, 'test') 

的這個輸出是:

<document> 
<test/> 
</document 

我所要的輸出是:

<document> 
<test> 
</test> 
</document> 

所以基本上我想關閉一個標籤,它沒有文本,但用於屬性值。我怎麼做?而且,這個標籤叫什麼?我會谷歌搜索它,但我不知道如何搜索它。

+0

難道你不能將值設置爲換行嗎?這意味着'test'將會有一個值爲'\ n'的文本類型的子節點。 – 2010-05-05 07:50:17

+0

謝謝,但我不知道相當於,並且這是一個公認的準則。弗蘭克已經回答了我的問題,但如果需要出現,我總是可以使用\ n。 – user225312 2010-05-05 07:57:03

回答

7

請注意,<test></test><test/>的含義完全相同。你想要的是測試標籤實際上有一個包含單行換行的文本。但是,沒有文字的空標籤通常寫爲<test/>,堅持將其顯示爲<test></test>是沒有意義的。

+0

哦,謝謝。我沒有意識到這一點。我認爲要保持一致性,如果標籤沒有文本,但有一些屬性,則必須關閉它。 – user225312 2010-05-05 07:55:55

2

使用lxml.html.tostring序列化到HTML

import lxml.html 
root = lxml.html.fromstring(mydocument) 
print(lxml.html.tostring(root)) 
3

爲了澄清@ymv答案的情況下,它可能是幫助他人:

from lxml import etree 

root = etree.Element('document') 
rootTree = etree.ElementTree(root) 
firstChild = etree.SubElement(root, 'test') 

print(etree.tostring(root, method='html')) 
### b'<document><test></test></document>' 
+0

更簡單一點,如果你想讓jQuery正確解析自定義元素。 – GheloAce 2015-12-10 02:24:04

0

使用空字符串 '' 這樣的:

root = etree.Element('document') 
etree.SubElement(root, 'test').text = ''