我有一个xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<channel>
<item>content with special character é</item>
</channel>
假设上面是xml文件,除了产品目录中的内容,标签和内容更多。这是使用以下过程创建的:
当我尝试在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;,...)保留的字符,我已经逃避了这些。
答案 0 :(得分:2)
您提供的示例中没有特殊字符,只有c
,é
,等常规字符(我认为空格有点特殊)等等。
我会从你描述的内容猜测你使用了不正确的编码。你说它是UTF-8,但它真的吗?
如果这是问题,你有三个解决方案:
(添加了这个虚拟行,因为解析器似乎不喜欢列表后面的代码块)
<?xml version="1.0" encoding="UTF-8"?>
<channel>
<item>content with special character é</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>