3

使用 Delphi 2009 和 IXMLDOMDocument2

将 XML 加载到 IXMLDOMDocument2 时收到“在文本内容中发现无效字符”错误。该字符是 1B(十六进制)并且存在于 CDATA 部分中。Microsoft 的 XML 查看器 (IE) 可以很好地加载文件。XML看起来像......

<data><child><![CDATA[-- ]]></child></data>

注意:我尝试粘贴 XML,但删除了特殊字符。在 CDATA 部分中,我的 XML 文件中的“--”后面有 1B 字符。

我已经尝试添加到 XML 和其他编码的开头,但没有任何东西对我有用。有什么办法可以加载这个文件吗?

谢谢,迈克尔

4

2 回答 2

5

XML 中不允许使用字符 U+001B以及大多数其他ASCII 控制字符。它的格式不正确,如果 Microsoft 的 XML 查看器没有抱怨,它就没有按照 XML 的规则解析它。啧!

在 XML 1.1中,除了 U+0000 之外的所有内容都可以作为字符引用包含在文档中,例如&#x1B;. (显然,这在 CDATA 部分中没有用,但是 CDATA 部分并没有真正用处。)

如果需要在 XML 中包含任意控制字​​符,通常需要使用特定于应用程序的编码方案,例如 base64。

于 2010-10-28T16:44:18.803 回答
0

从我需要从某个应用程序调用的某个 Web 服务中,我得到了很多&#x0;污染 XML 的字符。为了解决这个问题,我只是先将 XML 加载到 WideString 变量中,然后在将 XML 添加到 IXMLDocument 接口对象之前使用 StringReplace() 替换非法文本。
很脏,我知道。但是如果您仍然需要处理一些包含非法字符的 XML 文件,这只是最简单的选择。

于 2010-10-29T10:30:57.267 回答