2
from lxml import etree
from xml.etree.ElementTree import Element, SubElement, dump

listing = Element("COMPUTERLISTING")
print "STARTING_WITH:", dump(listing),"ENDS_WITH."

This outputs...
STARTING_WITH:<COMPUTERLISTING />
None ENDS_WITH.

I thought it should be...
STARTING_WITH:<COMPUTERLISTING></COMPUTERLISTING> 
ENDS_WITH.

我不明白,虽然我今天又病又累。一旦我开始添加元素,不匹配的标签就会被纠正,所以它不是一个炫耀的东西,但无论我做什么,幻影 None 仍然存在。是什么赋予了?我已经留下了进口,以防万一它们有问题。

4

1 回答 1

4

注意dump应该只用于调试。此外,您应该尽量避免混合lxmlxml库,即使它们非常相似。要回答您的问题,没有内容的标签通常是这样写的:

<COMPUTERLISTING />

这相当于<COMPUTERLISTING></COMPUTERLISTING>.

你得到None是因为ElementTree.dump写入sys.stdout而不是写入文件。当您打印 的输出时sys.stdout,您也在打印sys.stdout(即None)的返回值:

>>> from lxml import etree
>>> listing = etree.Element("COMPUTERLISTING")
>>> etree.dump(listing)  # returns normal sys.stdout output when you do not print
<COMPUTERLISTING>test</COMPUTERLISTING>
>>> print etree.dump(listing)  # now also prints the None returned by sys.stdout
<COMPUTERLISTING>test</COMPUTERLISTING>
None

对于更清洁的方法,您可以这样做:

>>> print etree.tostring(listing)
<COMPUTERLISTING/>

或者使用类似于您之前打印的字符串的内容(仅限文本):

>>> listing.text = 'test'
>>> print "STARTING_WITH:", etree.tostring(listing), "ENDS_WITH."  # now with text
STARTING_WITH: <COMPUTERLISTING>test</COMPUTERLISTING> ENDS_WITH.
于 2014-04-19T17:38:33.433 回答