【发布时间】:2020-05-02 15:27:53
【问题描述】:
我正在解析一个由 SMS 备份应用程序生成的 XML 文件,但有些内容被 HTML 实体转义了。我正在使用xml.etree.ElementTree,但它抱怨xml.etree.ElementTree.ParseError: reference to invalid character number: line 29, column 308,它与XML 文件中的��
 一致。我知道我可以使用 BeautifulSoup。事实上,我已经有一个使用它的工作程序,但我正在尝试重写它以便加快速度。示例标签在这里:
<sms protocol="0" address="1012223434" date="1548857971596" type="1" subject="null" body="... by the time you want a ride. �� " toa="null" sc_toa="null" service_center="null" read="1" status="-1" locked="0" date_sent="0" readable_date="Jan 30, 2019 9:19:31 AM" contact_name="Mom" />
为了不消耗太多内存,我在数据上使用了iterparse,但我也尝试过只使用parse,并在完成后清除每个元素,以便更好地控制,但我实际上还没有弄清楚这一部分。如果我使用html.unescape,它转义太多,然后我得到xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 27, column 175,这是在它转义之前有&apos; 的地方。如果我尝试将xml.sax.saxutils.escape 放在未转义的 HTML 之上,那么它当然也会转义实际上应该是 XML 一部分的所有其他内容。
如何在不转义所有 XML 实体的情况下对 HTML 实体进行转义?
【问题讨论】:
标签: python python-3.x xml xml-parsing html-entities