1

xmlファイルがあります。

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

上記がxmlファイルであると想定します。ただし、製品カタログのコンテンツには、さらに多くのタグとコンテンツが含まれています。これは、次のプロセスを使用して作成されます。

  1. ColdFusionファイルからデータベースを呼び出す
  2. プロシージャを使用してデータベースからコンテンツを取得し、coldfusionファイルに戻ります
  3. コールドフュージョンでxmlファイルを作成します(ファイル名を使用するだけです。例: "filename.xml")
  4. コールドフュージョンでクエリをループし、製品ごとの製品をxmlファイルに追加して、コンテンツをファイルに書き込みます

これにより、Firefoxでファイルを開こうとするとエラーが発生します(xmlファイルの解析をテストする私の方法)。エスケープが必要な特殊文字(「xmlが整形式ではない」など)があることを教えてくれます。だから私はこれらのxmlタグの中にCDATAタグを入れました、それはこれをクリアするはずですよね?そうではありません。xml用に予約されている文字(&、<、>、..)だけでなく、特殊文字に遭遇し続けます。

これが私がそれを失い始めた時です。小さなxmlファイルを手動で(coldfusionを介さずに)作成してみてテストした後、CDATAタグを削除し、上記のコードを挿入するだけで、動作するようになりました。Firefoxは上記のコードを適切に解析します。考えた結果、元のファイルである障害のあるファイルの内容全体を、手動で作成した新しいxmlファイル(.txt-> .xmlに名前を変更)にコピーしただけで、エラーは発生しません。

この場合、最初から2番目にコピーされた、まったく同じ内容の2つの別々のファイルが、どのように異なる方法で解析されるかを誰かに説明してもらえますか。1つ目は特殊文字で複数のエラーを示し、2つ目はこれらにまったく問題がありません。誰か、ここの机で凶暴になる前に..> _>

編集1: 特殊文字とは、具体的にはutf-8文字を意味します。私はxml用に予約されている文字(&、<、>、...)について話しているのではなく、すでにこれらをエスケープしています。

4

2 に答える 2

2

与えた例には特殊文字はなく、、、(スペースは少し特殊だと思います)などの通常の文字だけですcé

あなたの説明から、間違ったエンコーディングを使用していると思います。UTF-8だと言っていますが、本当ですか?

これが問題である場合、3つの解決策があります。

  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つには賛否両論があります。番号2を支持して、実際にエスケープする必要のない多くの文字をエスケープすることはありません。番号3を優先して、UTF-8とUTF-16のみをXMLパーサーで受け入れる必要があります。このように偽造すると、U+0000からU+の範囲のUTF-8と同じ文字セットで機能します。それらの多くである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 に答える