【发布时间】:2010-10-08 21:50:24
【问题描述】:
我正在努力解决以下问题:我有一个包含以下标记的 XML 字符串,我想使用 cElementTree 将其转换为有效的 XML 文档:
<tag>#55296;#57136;#55296;#57149;#55296;#57139;#55296;#57136;#55296;#57151;#55296;
#57154;#55296;#57136;</tag>
但每个 # 符号前面都有一个 & 符号,因此输出看起来像:
这是一个 unicode 字符串,编码为 UTF-8。我想丢弃这些数字字符引用,因为它们在有效的 XML 文档中不是合法的 XML(请参阅Parser error using Perl XML::DOM module, "reference to invalid character number")
我尝试了不同的正则表达式来匹配这些数字字符引用。例如,我尝试了以下(Python)正则表达式:
RE_NUMERIC_CHARACTER = re.compile('&#[\d{1,5}]+;')
这在常规 python 会话中确实有效,但只要我在代码中使用相同的正则表达式,它就不起作用,大概是因为这些数字字符已被解释(并显示为框或问号)。
我也尝试过 http://effbot.org/zone/re-sub.htm 的 unescape 功能,但这也不起作用。
因此:如何使用 Python 中的正则表达式匹配这些数字字符引用并创建有效的 XML 文档?
【问题讨论】:
-
它已经是一个有效的文件。这些字符是有效的 Unicode 字符。输出看起来像垃圾,因为您可能没有以控制台允许的编码进行打印。什么操作系统?您的控制台的 Unicode 编码是什么?
-
我使用的是 Windows 7,但我根本没有使用控制台,当我将字符串提供给 cElementTree.XML() 时会引发错误
-
@S.Lott:
&#55296;不是有效的字符引用,因为它引用了代理代码单元 (0xD800)。 -
@DrDee:“因此输出看起来像......”和“当我输入字符串时抛出错误”对我来说没有任何意义。您遇到什么确切错误?请复制粘贴。
-
@S.Lott:我正在从文件 XML 中读取,我正在尝试从该文件构造 XML DOM(使用 cElementTree),该文件包含上述标签,我得到的错误消息是: SyntaxError:引用无效字符号。因此,我试图去掉那些数字字符,但还没有成功。我明天将使用@bobince 解决方案