[英]How can I differentiate regular whitespaces and escaped ones ( ) when parsing XML with xml.etree.ElementTree (python)
我正在使用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 '
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.