Skip to main content
 首页 » 编程设计

python之使用 xml.etree.ElementTree (python) 解析 XML 时,如何区分常规空格和转义空格 ()

2025年05月04日9daizhj

我正在使用 xml.etree.ElementTree 来解析 XML 文件。 我如何强制它去除空格文本(只是常规空格,而不是 )或保留空格并忽略转义(保持原样)? 这是我的问题:

xml_text = """ 
<root> 
    <mytag> 
        data_with_space&#32; 
    </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&#32;' 

使用 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&#32; 
    </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&#32;\n    ' 
stripped text:  'data_with_space&#32;'