4

它是否正确?我已将我的 DS 读取的 XML 版本从 1.0 更改为 1.1,现在我收到一条错误消息,说它无法读取此版本。有没有办法解决?

我这样做的原因是因为 v1.1 能够解释诸如单位分隔符之类的事情。

这是我收到的例外:

An unhandled exception of type 'System.Xml.XmlException' 
occurred in System.Xml.dll

Additional information: Version number '1.1' is invalid. Line 1, position 16.
4

1 回答 1

4

XML 1.0 解析器可能会也可能不会接受解析版本号不是1.0. XML 解析器的行为取决于它所遵循的 XML 1.0 推荐版本。

第一版

W3C XML 推荐版本 1 和 2 说:

应该使用版本号“1.0”来表示符合本规范的这个版本;如果文档不符合本规范的此版本,则使用值“1.0”是错误的。

...

如果处理者收到标有他们不支持的版本的文档,他们可能会发出错误信号。

versionXML 声明中的有效值为

[26]    VersionNum  ::=     ([a-zA-Z0-9_.:] | '-')+

参考:http ://www.w3.org/TR/1998/REC-xml-19980210#sec-prolog-dtd

第三版

第 3 版对此进行了更改。我上面引用的段落已被删除,并且值version被固定为1.0

[26]    VersionNum     ::=      '1.0'

这实际上意味着 XML 1.0 解析器应该将其他版本号视为错误。
参考:http ://www.w3.org/XML/xml-V10-2e-errata#E38

第五版

在第 5 版中再次允许解析其他版本,当时新的更改实际上逆转了之前的更改。添加了两个新段落

即使 VersionNum 产品匹配任何形式为 '1.x' 的版本号,XML 1.0 文档不应该指定除 '1.0' 之外的版本号。

注意:当 XML 1.0 处理器遇到指定 1.x 版本号而不是 '1.0' 的文档时,它将作为 1.0 文档处理。这意味着 XML 1.0 处理器将接受 1.x 文档,前提是它们不使用任何非 1.0 功能。

现在的有效值version有形式1.x

[26]    VersionNum     ::=      '1.' [0-9]+

参考:http ://www.w3.org/XML/xml-V10-4e-errata#E10

概括

使用除 XML 1.0 文档之外的其他版本号是有风险的1.0,因为解析器可能拒绝处理它。如果您进行此类更改,您需要知道该文档将仅使用 XML 1.1 兼容工具(或 XML 1.0 第 5 版兼容工具,但您不能使用任何 XML 1.1 功能)处理。

于 2011-02-16T16:18:37.707 回答