1

我有一个 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<channel>
    <item>content with special character é</item>
</channel>

假设上面是 xml 文件,除了产品目录中的内容,还有更多的标签和内容。这是使用以下过程创建的:

  1. 从coldfusion文件调用数据库
  2. 使用过程从数据库中获取内容并返回到coldfusion文件
  3. 在coldfusion中创建一个xml文件(只需使用文件名,例如:“filename.xml”)
  4. 通过在coldfusion中循环查询并将每个产品的产品添加到xml文件中,将内容写入文件

当我尝试在 Firefox 中打开文件时,这给了我错误(我测试 xml 文件解析的方式)。告诉我我有一些特殊字符需要转义(“xml 格式不正确”或类似的东西)。所以我将 CDATA 标签放在这些 xml 标签中,这应该可以解决这个问题,对吧?它没有。它一直在遇到特殊字符,而不仅仅是为 xml 保留的字符(&、<、>、..)。

这是我开始失去它的时候。在手动创建较小的 xml 文件(而不是通过冷融合)进行了一些尝试和测试之后,我只需删除 CDATA 标记并插入上面的代码就可以使用它。Firefox 可以很好地解析上述代码。所以经过一番思考,我只是将错误文件的全部内容(原始文件)复制到了一个全新的手动创建的 xml 文件(.txt --> 重命名为 .xml),瞧,没有更多错误了。

有人可以向我解释一下,在这种情况下,从第一个复制到第二个内容完全相同的 2 个单独文件如何以不同方式解析。第一个在特殊字符上显示多个错误,第二个对这些完全没有问题..?拜托,有人,在我在这里发狂之前……>_>

编辑 1: 当我说特殊字符时,我特别指的是 utf-8 字符。我不是在谈论为 xml 保留的字符(&、<、>、...),我已经转义了这些字符。

4

2 回答 2

2

您给出的示例中没有特殊字符,只有普通字符,例如c, é, (我想空格有点特殊)等。

我会根据您的描述猜测您使用的编码不正确。你说它是 UTF-8,但它是真的吗?

如果这是问题所在,您有三个解决方案:

  1. 修复以 UTF-8 写入文件的代码。
  2. 修复代码以描述它实际所在的编码(在 HTTP 标头和 XML 声明中都这样做)。
  3. 一直说它是 UTF-8,但转义 US-ASCII 范围之外的任何字符(U+0000 到 U+007F)。例如,您将上述内容输出为:

(添加此虚拟行是因为解析器似乎不喜欢列表之后的代码块)

<?xml version="1.0" encoding="UTF-8"?>
<channel>
    <item>content with special character &#xe9;</item>
</channel>

第一个是最好的选择,但其他两个则有利有弊。支持数字 2,它不会转义尽可能多的不需要转义的字符。支持数字 3,只有 UTF-8 和 UTF-16必须被 XML 解析器接受,并且以这种方式伪造它适用于任何与 UTF-8 相同的字符集,范围为 U+0000 到 U+ 007F,其中有很多。

于 2012-08-07T13:38:00.313 回答
0

我使用 XmlFormat() 来格式化 xml 文件中的数据。也许这会解决你的问题。

<?xml version="1.0" encoding="UTF-8"?>
<channel>
    <item>#XmlFormat(field_from_database, true)#</item>
</channel>
于 2012-08-07T23:03:46.413 回答