【发布时间】:2013-12-19 07:14:27
【问题描述】:
我正在使用xml.etree.ElementTree 来解析 XML 文件。
如何强制它去除空格文本(只是常规空格,而不是 )或留下空格并忽略转义(保持原样)?
这是我的问题:
xml_text = """
<root>
<mytag>
data_with_space 
</mytag>
</root>"""
root = xml.etree.ElementTree.fromstring(xml_text)
mytag = root.find("mytag")
print "original text: ", repr(mytag.text)
print "stripped text: ", repr(mytag.text.strip())
打印出来:
original text: '\n data_with_space \n '
stripped text: 'data_with_space'
我需要什么:
'data_with_space '
或者(我可以通过其他方式逃脱):
'data_with_space '
使用xml.etree.ElementTree 的解决方案更可取,否则我将不得不重写大量代码
【问题讨论】:
-
XML 规范将
&#32;和ASCII 空格字符' '视为相同。您始终可以将任何字符替换为其&#...;等效字符,而无需更改 XML 工具所理解的文件内容。试图让 XML 库将它们视为不同,您不会有任何成功 - 您需要更改输入 XML(迄今为止最好的选择,如果它在您的情况下实际上是可能的)或者做一些丑陋和不可靠的在将其解析为 XML 之前对字符串进行预处理。 -
@PeterDeGlopper 很遗憾,我对 XML 格式无能为力。它由不同的应用程序组成,我的工作是分析其中包含的数据
-
我也去过那里。不幸的是,该应用程序提供的数据无法保持您需要做出的区分——如果 XML 解析器对
<mytag>foo bar</mytag>的处理方式与对<mytag>foo&#32;bar</mytag>的处理方式不同,那么它就是不正确的。字符串预处理可能是您唯一的选择,虽然很痛苦。我希望您至少可以缩小需要特别处理字符实体引用的上下文。
标签: python xml escaping html-escape-characters xml.etree