Delphi,IXMLDOMDocument2,由于字符无效而导致加载失败

时间:2010-10-28 16:35:01

标签: xml delphi character ixmldomdocument

使用Delphi 2009和IXMLDOMDocument2

在将XML加载到IXMLDOMDocument2时,我收到“在文本内容中找到无效字符”错误。字符为1B(十六进制)并存在于CDATA部分中。 Microsoft的XML查看器(IE)加载文件就好了。 XML看起来像......

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

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

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

谢谢, 迈克尔

2 个答案:

答案 0 :(得分:5)

ASCII控制字符的along with most of the rest中不允许使用字符U + 001B。它的格式不正确,如果微软的XML查看器没有抱怨,它就不会根据XML规则对其进行解析。 TSK!

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

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

答案 1 :(得分:0)

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