不同地解析具有相同内容的xml文件

时间:2012-08-07 13:22:48

标签: xml encoding coldfusion xml-parsing cdata

我有一个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文件来将内容写入文件
  5. 当我尝试在Firefox中打开文件时(这是我测试解析xml文件的方式),这给了我错误。告诉我,我有一些需要转义的特殊字符(“xml没有格式良好”或类似的东西)。所以我将CDATA标签放在这些xml标签中,这应该清除它,对吧? 它没有。它不断绊倒特殊字符,而不仅仅是为xml(&amp;,&lt;,&gt;,..)保留的字符。

    这是我开始失去它的时候。经过一些尝试和测试手动创建更小的xml文件(而不是通过coldfusion),我得到了它,只需删除CDATA标签,只需插入上面的代码。 Firefox解析上面的代码就好了。 因此,经过一番思考,我只是将故障文件的原始内容(原始文件)复制到一个全新的手动创建的xml文件(.txt - &gt;重命名为.xml)中,并且没有更多错误。

    有人可以向我解释,在这种情况下,从第一个到第二个复制的具有完全相同内容的2个单独文件将以不同方式进行解析。第一个显示特殊字符的多个错误,第二个没有问题这些...? 请有人在我在我的办公桌前狂暴之前..&gt; _&gt;

    编辑1: 当我说特殊字符时,我特意指的是utf-8字符。我不是在谈论为xml(&amp;,&lt;,&gt;,...)保留的字符,我已经逃避了这些。

2 个答案:

答案 0 :(得分:2)

您提供的示例中没有特殊字符,只有cé等常规字符(我认为空格有点特殊)等等。

我会从你描述的内容猜测你使用了不正确的编码。你说它是UTF-8,但它真的吗?

如果这是问题,你有三个解决方案:

  1. 修复代码以UTF-8编写文件。
  2. 修复代码以描述它实际所在的编码(在HTTP标头和XML声明中都这样做)。
  3. 继续说它是UTF-8,但是要转义US-ASCII范围之外的任何字符(U + 0000到U + 007F)。例如。你输出以上内容:
  4. (添加了这个虚拟行,因为解析器似乎不喜欢列表后面的代码块)

    <?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,这是很多。

答案 1 :(得分:0)

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

<?xml version="1.0" encoding="UTF-8"?>
<channel>
    <item>#XmlFormat(field_from_database, true)#</item>
</channel>