gpt4 book ai didi

python - 删除 XML 字符串中的空格

转载 作者:IT老高 更新时间:2023-10-28 20:43:18 32 4
gpt4 key购买 nike

如何在 Python 2.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

我不能使用提供 method 参数的 Python 2.7。

minidom:一样:

xmlDocument = xml.dom.minidom.parseString(xmlStr)
xmlStr = xmlDocument.toprettyxml(indent='', newl='', encoding='UTF-8')

最佳答案

最简单的解决方案可能是使用 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 或空字符串)

关于python - 删除 XML 字符串中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310614/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com