最简单的解决方案可能是使用lxml,您可以在其中设置解析器选项以忽略元素之间的空白:
>>> from lxml import etree>>> parser = etree.XMLParser(remove_blank_text=True)>>> xml_str = '''<root>>>> <head></head>>>> <content></content>>>> </root>'''>>> elem = etree.XML(xml_str, parser=parser)>>> print etree.tostring(elem)<root><head/><content/></root>
这可能足以满足您的需求,但是有些警告是安全的:
这只会删除元素之间的空格节点,并尽量不要删除内容混合的元素内部的空格节点:
>>> elem = etree.XML('<p> spam <a>ham</a> <a>eggs</a></p>', parser=parser)>>> print etree.tostring(elem)<p> spam <a>ham</a> <a>eggs</a></p>
textnode的前导或尾随空格将不会被删除。但是,在某些情况下,它将仍然从混合内容中删除空白节点:如果解析器尚未在该级别遇到非空白节点。
>>> elem = etree.XML('<p><a> ham</a> <a>eggs</a></p>', parser=parser)>>> print etree.tostring(elem)<p><a> ham</a><a>eggs</a></p>
如果您不想这样做,可以使用
xml:space="preserve",它将受到尊重。另一种选择是使用dtd和use
etree.XMLParser(load_dtd=True),其中解析器将使用dtd来确定哪些空白节点有效或无效。
除此之外,您将必须编写自己的代码以删除不需要的空格(迭代后代,并在适当的情况下设置
.text和
.tail包含仅空格
None或为空字符串的属性)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)