0

XStreamMarshallerを使用してJavaSpringプロジェクトでXML出力を生成しようとしています。私が生成しているXMLには、要素テキストにCDATA値が含まれています。次のように、コマンドオブジェクトにこのCDATAテキストを手動で作成しています。

 f.setText("<![CDATA[cdata-text]]>");

XStreamMarshallerは、要素(以下のテキストデータはエイリアスです)を次のように生成しました。

<text-data><![CDATA[cdata-text]]></text-data>

上記のXML表示は期待どおりです(上記の要素名のバックスラッシュは無視してください:フォーラムのフォーマット)。しかし、生成されたXML出力でソースの表示<text-data>&lt;![CDATA[cdata-text]]&gt;</text-data>を実行すると、要素に対して次のように表示されます。

問題:

ご覧のとおり、ビューソースでは、より小さい文字&lt;とより大きい文字が置き換えられています。&gt;クライアントがソースを読み取り、XML出力からCDATAセクションを識別する必要がありますが、上記のシナリオではそうではありません。

XStreamMarshallerに、提供したテキストの特殊文字をエスケープさせる方法はありますか?

マーシャラーのエンコーディングをISO-8859-1に設定しましたが、それも機能しません。XStreamMarshallerで上記を実行できない場合は、これを実行できる代替のマーシャラー/アンマーシャラーを提案できますか?

//以下のPaŭloEbermannによって提案されたように、XMLとビューソースを表示します。

XMLビュー(IEで表示):

An invalid character was found in text content. Error processing resource 'http://localhost:8080/file-service-framework/fil...

Los t

ソースを表示:

<service id="file-text"><text-data>&lt;![CDATA[
Los túneles a través de las montañas hacen más fácil viajar por carretera.
]]&gt;</text-data></service>

どうもありがとうございます。

4

1 に答える 1

0

CDATA セクションの生成は、XML 生成ライブラリのタスクであり、クライアントのタスクではありません。だから、あなたは単に書く必要があります

f.setText("cdata-text");

ライブラリは、その内容に対して<![CDATA[...を使用するか]]>、エスケープを使用するかを決定できます。受信者にとっては何の違いもありません&lt;


編集:

出力を見ると、(CDATA を除いて) 正しく見えます。

ここで IE がエラーをスローする場合は、正しいエンコーディングを宣言していない可能性があります。

Spring フレームワークについてはよくわかりませんが、Marshaller で使用されるエンコーディングは、HTTP ヘッダー ( Content-Type: ... ;charset=...) または<?xml version="1.0" encoding="..." ?>XML プロローグで送信されるエンコーディングと同じである必要があります (これら 2 つも異なるべきではありません)。

UTF-8これは、Latin-1 文字だけでなく、すべての文字を表すことができるため、どこでもエンコーディングとしてお勧めします。

于 2011-03-09T18:33:21.090 に答える