我有以下XML文档:
<x>
<a>Some text</c>
<b>Some text 2</b>
<c>Some text 3</c>
</x>
我想获取所有标签的文字,因此我决定使用getiterator()
。
我的问题是,由于我无法理解的原因,它会加上空行。考虑一下:
>>> for text in document_root.getiterator():
... print text.text
...
Some text
Some text 2
Some text 3
注意'Some text'之前的两个额外空白行。这是什么原因?如果我将标记传递给getiterator()
方法,则应该没有空白行。
>>> for text in document_root.getiterator('a'):
... print text.text
...
Some text
所以我的问题是,如果我在没有标记的情况下通过getiterator()
而导致这些额外的空白行是什么?如何删除它们?
答案 0 :(得分:2)
默认情况下,lxml.etree
会将标记之间的空文本视为该标记的文本内容,在您的情况下,显示的空白来自<x>
。如果你想要一个忽略空格的解析器,你会想做类似的事情:
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.XML("""\
<x>
<a>Some text</a>
<b>Some text 2</b>
<c>Some text 3</c>
</x>
""", parser)
for node in tree.iter():
if node.text == None: continue
print node.text
注意如果根本没有文字,node.text
将如何返回无。另请注意,the API documentation for lxml说明getiterator()
已弃用iter()
。
有关详细信息,请参阅The lxml.etree Tutorial: Parser objects。
答案 1 :(得分:0)
虽然我不确定,我会假设它正在尝试阅读&lt; x&gt;。
无论如何,
出了什么问题for text in document_root.getiterator():
if text.strip() == '': continue
print text