我正在使用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
的解决方案更可取,因为我必须重写大量代码
答案 0 :(得分:1)
标准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 '