繁体   English   中英

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

[英]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&#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库对待&#32; ' ' 相等 如果直接应用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;'        

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM