我正在使用 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 库将 和 ' ' 视为相等。如果您直接应用fromstring(xml_text),则无法避免均衡,因此无法区分它们。停止转义的唯一方法是在应用 fromstring() 之前将其翻译成其他内容,然后再将其翻译回来。
import xml.etree.ElementTree
stop_escape = lambda text: text.replace("&#", "|STOP_ESCAPE|")
resume_escape = lambda text: text.replace("|STOP_ESCAPE|", "&#")
xml_text = """
<root>
<mytag>
data_with_space 
</mytag>
</root>"""
root = xml.etree.ElementTree.fromstring(stop_escape(xml_text))
mytag_txt = resume_escape(root.find("mytag").text)
print "original text: ", repr(mytag_txt)
print "stripped text: ", repr(mytag_txt.strip())
你会得到:
original text: '\n data_with_space \n '
stripped text: 'data_with_space '
