本文可帮助你解决 XML 文档包含低序 ASCII 字符时出现的问题。
原始产品版本: Microsoft XML
原始 KB 数: 315580
现象
尝试使用 MSXML 分析程序版本 3.0 或更高版本分析包含某些低序不可打印 ASCII 字符(即 ASCII 32 下面的字符)的 XML 文档时,可能会收到以下错误消息:
文本内容中找到了无效字符。
原因
MSXML 分析程序版本 3.0 及更高版本严格强制实施万维网联盟 (W3C) XML 语言规范定义的有效 XML 字符范围。 使用 3.0 或更高版本的 MSXML 分析的 XML 文档不能包含超出定义的有效 XML 字符范围的字符。 “详细信息”部分中列出的范围中的低序不可打印 ASCII 字符无效。 包含这些字符实例的 XML 文档不符合 W3C 规范,并且无法成功分析 MSXML 版本 3.0 及更高版本。
解决方法
若要解决此问题,请删除低序不可打印 ASCII 字符的实例,或者将字符替换为备用有效字符(如空格字符(ASCII 32,十六进制 #x20)。 此解决方案使 XML 文档符合 W3C 规范。 但是,删除或替换这些字符的实例可能会影响使用数据和字符非常重要的其他应用程序。 这种额外的影响只能通过测试来标识,并且需要通过实现适用于特定情况的修补程序或解决方法来解决。
详细信息
MSXML 分析程序版本 2.6 及更早版本允许 XML 文档包含低于 W3C 有效 XML 字符范围的低序不可打印 ASCII 字符。 但是,MSXML 分析器版本 3.0 及更高版本的设计已更改,以严格强制实施 W3C XML 语言规范中定义的有效 XML 字符范围。 需要此设计更改才能识别不符合要求的 XML 文档。
以下是 W3C XML 语言规范 1.0 定义的有效 XML 字符和字符范围(十六进制值):
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
以下是 MSXML 版本 3.0 及更高版本拒绝的低序不可打印 ASCII 字符的字符范围:
#x0 - #x8 (ASCII 0 - 8)
#xB - #xC (ASCII 11 - 12)
#xE - #x1F (ASCII 14 - 31)
此设计更改可能会影响以下用户和应用程序:
- Internet Explorer 用户:使用 Internet Explorer 版本 5.5 及更早版本(且未在替换模式下安装 MSXML 3.0 的用户)浏览和查看包含指定低序一个或多个实例的 XML 文档 不可打印的 ASCII 字符在升级到 Internet Explorer 6.0 后遇到错误消息,因为 Internet Explorer 6.0 在替换模式下安装 MSXML 3.0 SP2,并使用它分析 XML 文档。
- MDAC 和 ADO 用户:将包含指定低序 ASCII 字符的一个或多个实例的 ADO 持久化 XML 文档加载到 ADO
Recordset
对象的开发人员和用户在升级到 MDAC 2.7 后遇到错误消息,因为 MDAC 2.7 安装 MSXML 3.0 SP2,这是 ADO 2.7Recordset
对象使用的 MSXML 分析器的版本。 - 使用版本无关的
PROGIDs
实例化 MSXML DOM 对象的应用程序在分析 XML 文档时,当 MSXML 3.0 或其某个服务包安装在 Replace 模式下,或修改代码以使用特定于 MSXML 3.0 或 4.0 版本的PROGIDs
时,会生成指定的错误。
参考
有关“症状”部分中指定的错误消息的其他已知原因和解决方法的详细信息,请参阅: