最简单的解决方案可能是使用
lxml,您可以在其中设置一个解析器选项来忽略元素之间的空白:
>>> from lxml import etree
>>> parser = etree.XMLParser(remove_blank_text=True)
>>> xml_str = '''
>>>
>>>
>>> '''
>>> elem = etree.XML(xml_str, parser=parser)
>>> print etree.tostring(elem)
这可能足以满足您的需求,但有些警告要安全在一起:
这将只是删除元素之间的空白节点,并尝试不使用混合内容删除元素内的空白节点:
>>> elem = etree.XML('
spam ham eggs
', parser=parser)>>> print etree.tostring(elem)
spam ham eggs
文本节点的前导或尾随空格将不会被删除。然而,在某些情况下,仍然会从混合内容中删除空白节点:如果解析器尚未在该级别遇到非空白节点。
>>> elem = etree.XML('
ham eggs
', parser=parser)>>> print etree.tostring(elem)
hameggs
如果你不想要,可以使用xml:space =“preserve”,这将被尊重。另一个选择是使用dtd并使用etree.XMLParser(load_dtd = True),其中解析器将使用dtd来确定哪些空格节点是重要的。
除此之外,您必须编写自己的代码来删除不需要的空格(迭代后代,并在适当的情况下将仅包含空格的.text和.tail属性设置为None或空字符串)