如何在Python2.6中删除XML字符串中的空白和换行符?我尝试了以下程序包:
etree:此代码段保留原始空白:
xmlStr = '''<root>
<head></head>
<content></content>
</root>'''
xmlElement = xml.etree.ElementTree.XML(xmlStr)
xmlStr = xml.etree.ElementTree.tostring(xmlElement, 'UTF-8')
print xmlStr
我不能使用Python 2.7来提供method
参数。
同样的:
xmlDocument = xml.dom.minidom.parseString(xmlStr)
xmlStr = xmlDocument.toprettyxml(indent='', newl='', encoding='UTF-8')
最简单的解决方案可能是使用lxml,在这里您可以设置一个解析器选项来忽略元素之间的空白:
这可能足以满足您的需要,但有些警告是安全的:
这将只删除元素之间的空白节点,并尝试不删除包含混合内容的元素内部的空白节点:
不会删除textnodes中的前导或尾随空白。但是,在某些情况下,它仍然会从混合内容中删除空白节点:如果解析器在该级别还没有遇到非空白节点。
如果你不想要,你可以使用
xml:space="preserve"
,这将得到尊重。另一个选择是使用dtd并使用etree.XMLParser(load_dtd=True)
,在这里解析器将使用dtd来确定哪些空白节点是有效的还是无效的。除此之外,您还必须编写自己的代码来删除不需要的空白(迭代子代,并在适当的情况下,将只包含空白的
.text
和.tail
属性设置为None
或空字符串)空白在XML文档中很重要。使用空白进行缩进是对XML的一种拙劣使用,因为它引入了真正没有的重要数据——不幸的是,这是一种规范。去除空白的任何编程方法充其量都只是一种猜测——您需要更好地了解XML所传递的内容,以便正确地删除空白,而不必踩到某个数据的脚趾。
以下是我不想使用lxml而快速想到的:
我真的只需要用其他损坏的缩进来重新缩进XML文件。它不尊重
preserve
指令,但是,老实说,处理XMLs的许多其他软件也是如此,这是一个相当有趣的要求:)而且,您可以很容易地将这种功能添加到上面的代码中(只需检查space
属性,如果它的值是'preserve'就不会再出现)相关问题 更多 >
编程相关推荐