【问题标题】:python - Parse XML with unicode characters into ElementTreepython - 将带有 unicode 字符的 XML 解析为 ElementTree
【发布时间】:2017-10-12 17:26:24
【问题描述】:

我正在使用PDFminer,但它包含一个错误并且我得到以下无效的 XML 文件:

<?xml version="1.1" encoding="UTF-8"?>
<string size="16">&#244;&#130;&#204;&#2;f&#198;&#135;&#143;&#11;*&#154;&#23;]&#214;&#20;[</string>

当我尝试使用 ElementTree 解析它时,我收到以下错误:

    bookXml = xml.etree.ElementTree.parse(filename)
  File "C:\Users\User\Anaconda3\lib\xml\etree\ElementTree.py", line 1196, in parse
    tree.parse(source, parser)
  File "C:\Users\User\Anaconda3\lib\xml\etree\ElementTree.py", line 597, in parse
    self._root = parser._parse_whole(source)
xml.etree.ElementTree.ParseError: reference to invalid character number: line 1, column 36

我认为处理这种情况的最好方法是先修复 XML,但是如何?

【问题讨论】:

  • 问题似乎是&amp;#2;(和其他一些)等于U+0002,AFAIK 不是 XML 文件中的有效字符。
  • 哦,XML版本是"1.1"!!你不是每天都能看到的。那我猜U+0002毕竟是正确的,但是你很难找到兼容的工具......

标签: python xml unicode


【解决方案1】:

我会将有问题的 XML 字符串包装在 CDATA 中。我一这样做就确认工作。示例:

    <?xml version="1.1" encoding="UTF-8"?>
<string><![CDATA[&#244;&#130;&#204;&#2;&#198;&#135;&#143;&#11;*&#154;&#23;&#214;&#20;]]></string>

更多关于 CDATA here.

【讨论】:

  • 这只是临时解决方案,因为现在我需要调用html.unescape() 来获取所需的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多