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

发布于 2024-09-29 04:43:39 字数 382 浏览 7 评论 0原文

使用 Delphi 2009 和 IXMLDOMDocument2

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

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

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

谢谢, 迈克尔

Using Delphi 2009 and IXMLDOMDocument2

I receive "An invalid character was found in text content" error when loading XML into IXMLDOMDocument2. The character is 1B (in Hex) and is present within a CDATA section. Microsoft's XML viewer (IE) loads the file just fine. The XML looks like...

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

NOTE: I try to paste the XML, but the special character is removed. In the CDATA section there is the 1B character following "-- " in my XML file.

I've tried adding to the start of the XML and other encodings and nothing is working for me. Is there anything that can be done to load this file?

Thanks,
Michael

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独木成林 2024-10-06 04:43:39

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

仅在 XML 1.1 中,除了 U+0000 之外的所有内容都可以作为字符引用(如 )包含在文档中。 (显然,这在 CDATA 部分中没有用处,但是 CDATA 部分实际上也没有多大用处。)

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

Character U+001B is not allowed in XML, along with most of the rest of the ASCII control characters. It's not well-formed and if Microsoft's XML viewer doesn't complain, it's not parsing it according to the rules of XML. Tsk!

In XML 1.1 only, all but U+0000 may be included in a document as a character reference like . (Obviously, that's no use in a CDATA section, but then CDATA sections aren't really much use anyway.)

If you need to include arbitrary control characters in XML, you will usually need to use an application-specific encoding scheme such as base64.

空心↖ 2024-10-06 04:43:39

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

From some web service that I need to call from some application, I get a lot of characters contaminating the XML. To solve this problem, I just load the XML first in a WideString variable, then replace the illegal text by using StringReplace() before adding the XML to an IXMLDocument interface object.
It's dirty, I know. But if you still need to process some XML file that contains illegal characters, this is just the simplest option.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文