我已经获得了一个XML文件,但是它正在加载无效字符。我没有XML经验,但有没有办法解析数据(可能用正则表达式)来显示正确的值?或者数据是否已损坏?
以下是XML中的输出:
<Name>�����+??�����??A~?�G~?��??</Name>
抛出的错误是:
XML解析错误:对无效字符编号的引用
答案 0 :(得分:0)
“XML”中的所有字符实体(�
等)都不在XML规范允许的范围内,因此您的数据实际上不是XML - 它不是well-formed。
没有正则表达式无济于事。
是的,看起来您的数据在某种程度上是错误的或损坏的,因为名称通常不包含空字符和控制字符,即使XML确实允许这样的字符。
答案 1 :(得分:0)
实际上,您也可以尝试使用html.unescape
函数,或将&#<something>;
替换为[#something;]
(或类似名称)。第一种方法每个坏字符仅产生一个字符,但是可以产生具有不同输入字符的�
。第二种方法是每个坏字符产生一个字符序列,但是有时最好看看原始输入是什么样。
from xml.etree import ElementTree as ET
import re
s = "<Name>�����+??�����??A~?�G~?��??</Name>"
ET.fromstring(html.unescape(s)).text
# Out: '�����+??�����??A~?�G~?��??'
# Replace &#anything123; with [#anything123;]
ET.fromstring(re.sub(r'&#([a-zA-Z0-9]+);?', r'[#\1;]', s)).text
# Out: '[#x0;][#x0;][#x0;][#x0;][#x0;]+[#xB;][#x1;][#x4;]?[#x2;]?[#x0;][#x0;][#x0;][#x0;][#x0;]??A~?[#x0;]G~?[#x4;][#x0;][#x0;]??[#x12;]'