如何在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
我不能使用Python2.7,它提供了method
参数。
minidom:同样的:
xmlDocument = xml.dom.minidom.parseString(xmlStr)
xmlStr = xmlDocument.toprettyxml(indent='', newl='', encoding='UTF-8')
发布于 2010-07-23 17:39:30
最简单的解决方案可能是使用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>
不会删除文本节点中的前导空格或尾随空格。但是,在某些情况下,它仍然会从混合内容中删除空格节点:如果解析器还没有在该级别遇到非空格节点。
>>> 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并使用etree.XMLParser(load_dtd=True)
,其中解析器将使用dtd来确定哪些空格节点是重要的还是不重要的。
除此之外,您必须编写自己的代码来删除不需要的空格(迭代子元素,并在适当的情况下,将只包含空格的.text
和.tail
属性设置为None
或空字符串)
发布于 2013-06-04 21:23:32
下面是我想出的一些快速方法,因为我不想使用lxml:
from xml.dom import minidom
from xml.dom.minidom import Node
def remove_blanks(node):
for x in node.childNodes:
if x.nodeType == Node.TEXT_NODE:
if x.nodeValue:
x.nodeValue = x.nodeValue.strip()
elif x.nodeType == Node.ELEMENT_NODE:
remove_blanks(x)
xml = minidom.parse('file.xml')
remove_blanks(xml)
xml.normalize()
with file('file.xml', 'w') as result:
result.write(xml.toprettyxml(indent = ' '))
我真的只需要重新缩进XML文件,否则就会损坏缩进。它不遵守preserve
指令,但老实说,许多其他处理XML的软件也是这样,这是一个相当有趣的要求:)而且,您可以很容易地将这种功能添加到上面的代码中(只需检查space
属性,如果它的值为‘preserve’,请不要重复)。
发布于 2010-07-23 06:44:29
空白在XML文档中很重要。使用空格进行缩进是XML的一个不好的用法,因为它引入了实际上没有的重要数据--不幸的是,这是一种规范。您采用的任何去除空格的编程方法充其量只是一种猜测-您需要更好地了解XML所传达的信息,才能正确地删除空格,而不会触动某些数据。
https://stackoverflow.com/questions/3310614
复制相似问题