lxml getiterator()的奇怪行为

2024-10-01 13:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下XML文档:

<x>
  <a>Some text</c>
  <b>Some text 2</b>
  <c>Some text 3</c>
</x>

我想得到所有标记的文本,所以我决定使用getiterator()。在

我的问题是,它加起来的空白行的原因我不明白。考虑一下这个:

^{pr2}$

注意“sometext”前面的两个空行。这是什么原因?如果我将一个标记传递给getiterator()方法,那么就没有空行了。在

>>> for text in document_root.getiterator('a'):
...     print text.text
... 
Some text

所以我的问题是,如果我不带标记传递getiterator(),是什么导致了这些额外的空行,我如何删除它们?在


Tags: 方法text文档标记文本for原因some
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将如何返回None。还要注意,the API documentation for lxml声明{}被弃用,取而代之的是{}。在

有关详细信息,请参阅The lxml.etree Tutorial: Parser objects。在

虽然我不确定,但我认为它是在<;x>;内读取文本;。在

总之,怎么了

for text in document_root.getiterator():
    if text.strip() == '': continue
    print text

相关问题 更多 >