1

答えを探しましたが、見つかりませんでした。

サーバーによって生成された長いxmlがあります。xsltを使ってノードの一部を表示したい。

問題は次のとおりです。ブラウザーで xml を開くと、次のようになります。XML 解析に失敗しました。

<![CDATA[エラーは、で始まり、で終わるノードの1つ内のcdata内にあります]]>

エラーは次,のとおりです。何百もの文字が似ています。

私の理解では、これが cdata にある場合、無視またはエスケープする必要があります。

xml エンコーディングは utf8 です。

ご協力ありがとうございました。

4

1 に答える 1

5

エンコーディング

「xmlエンコーディングはutf8です」と言います。あなたのパーサーはあなたが間違っていると言っています。UTF-8 では発生しないバイト シーケンスを検出しています。私の経験では、ISO 8859-1 (ISO Latin 1) データが誤って UTF-8 とタグ付けされている場合によく発生します。

問題のデータを 16 進ダンプまたは同様のツールで調べて、それが合法的な UTF-8 であることを確認した場合は、ベンダーに報告するバグがあるようです。そうでない場合は、パーサーが正しい可能性が高く、データが UTF-8 である可能性は低いと表示されます。それが何であるかを調べて正しく宣言するか、サーバーの構成を修正して UTF-8 データ ストリームを生成するか、文字エンコード変換ユーティリティを使用してサーバーの出力を UTF-8 に変換します。

CDATA セクション

CDATA セクションは、XML として解析される文字シーケンス内で発生します。それらのコンテンツは文字データであり、XML 区切り文字ではないことを宣言します。CDATA セクションは、その内容がビット、バイト、またはオクテットの任意のシーケンスであることを宣言しませんし、宣言することもできません。文字のシーケンスが CDATA セクションとして認識されるまでに、データ ストリームのエンコーディングのビットはすでに文字に変換されています。「これらのオクテットを文字として解析しないでください!」と言うには遅すぎます。

于 2013-02-05T17:17:19.060 に答える