2012-02-29 7 views
0

私は、XMLスニペットを持っていると言う:ダブルエスケープXMLエンティティ

<root><node>This & that</node></root> 

エンド:

<root> 
    <node>This &amp; that</node> 
</root> 

これは、文字列としてSOAP経由で送信される必要がある、私たちのフレームワークは、としてそれをエスケープユーザーはこれが解析されないことを私たちに伝え、私たちの単体テスト(正しく)はそれをエスケープします。結果のXMLスニペットは準拠している必要があります。<node>This &amp; that</node>は、エスケープされていないときにレンダリングレイヤーに送信する必要があります(送信からの&lt;node>This &amp;amp; that&lt;/node>)。

+2

XMLを構築する際にこのデータをCDATAタグに追加しないでください。 – kosa

+0

+1が同意します。私の決断ではありませんでした。とにかく、CDATAをシリアライズするには、私は '>'をエスケープしなければならなかったでしょう。もし '& gt;'が解析されなければ、私たちは同じボートにいます。 – Pedantic

+0

AFAIKの場合、CDATAに含まれていればエスケープする必要はありません。私も間違っているかもしれない。 – kosa

答えて

1

あなたの分析は正しいようです。利用可能なエビデンスから、エンドユーザーのソフトウェアがSOAPメッセージからXMLテキスト(アンサンブルされていないことを意味している場合)を抽出するなど、データを正しく処理していないと判断します。その文書を解析しようとしたり、ある段階でXMLパーサ以外のものを使用しようとしたりしています。

あなたとあなたのシステムが正しく処理されているかどうかを確認することができます。 In order to write a literal "&" in XML, HTML, or SGML text one writes "&amp;" insteadなどのプレーンテキスト。

(これは、問題について危険な考え方が示唆されているため、単体テストの説明が「二重アンエスケープ」になっていると少し気になります。エラーまたは文字列<root><node>This & that</node></root>は整形式のXMLでなくてはなりません。

+1

>(I穏やかに関わっている...) 右に、私は誤解の可能性があると思います。ユニットテスト自体はそれを二重にエスケープしません。入力文字列をエスケープして、適合するXML( '&')をレンダリングレイヤーに渡します。自信を持ってくれてありがとう。私はSOAPをあまり使っていないし、XMLを使ったより豊富なインターチェンジをサポートするフレームワークを使って、Stringベースのインターフェースは弱いと思うが、 ( – Pedantic

+0

@Chris私の心配は完全に緩和されています。幸運! –

+0

編集して、明確にしました...ありがとう! – Pedantic

関連する問題