手早く汚れた構成エディターを起動して実行する必要があります。流れは次のようになります。
構成 (サーバー上の POCO) は XML にシリアライズされます。
この時点で、XML は整形式です。構成は、XElements の Web サーバーに送信されます。
Web サーバーでは、XML (Yes, All of IT) が編集用のテキストエリアにダンプされます。
ユーザーは Web ページで XML を直接編集し、[送信] をクリックします。
応答では、XML 構成の変更されたテキストを取得します。この時点で、すべてのエスケープは Web ページに表示するプロセスによって元に戻されています。
文字列を XML オブジェクト (XmlElement、XElement など) に読み込もうとしました。カブーム。
問題は、シリアライゼーションが属性文字列をエスケープすることですが、これは途中の変換で失われます。
たとえば、正規表現を持つオブジェクトがあるとします。Web サーバーに関する構成は次のとおりです。
<Configuration>
<Validator Expression="[^<]" />
</Configuration>
したがって、これをテキストエリアに配置すると、ユーザーには次のように表示されます。
<Configuration>
<Validator Expression="[^<]" />
</Configuration>
そのため、ユーザーはわずかな変更を加えて、変更を送信します。Web サーバーでは、応答文字列は次のようになります。
<Configuration>
<Validator Expression="[^<]" />
<Validator Expression="[^&]" />
</Configuration>
そのため、ユーザーは別のバリデーターを追加しましたが、現在、両方に不正な文字を含む属性があります。これを任意の XML オブジェクトにロードしようとすると、テキスト文字列内で < と & が有効でないため、例外がスローされます。I CANNOT CANNOT CANNOT CANNOT どんな種類のエンコーディング関数も使用できません。
var 結果 = Server.HttpEncode(editedConfig);
結果は
<Configuration>
<Validator Expression="[^<]" />
<Validator Expression="[^&]" />
</Configuration>
これは有効な XML ではありません。これをあらゆる種類の XML 要素にロードしようとすると、落下する金床にぶつかります。私はアンビルが落ちるのが好きではありません。
SO、疑問が残ります...この文字列 XML を XML オブジェクトに解析できるようにする唯一の方法は、正規表現の置換を使用することですか? ロード時に「制約をオフにする」方法はありますか? これをどのように回避しますか?
有効な回答があるとは思わないので、最後の回答とこれを wiki 化します。
テキストエリアに配置した XML は有効で、エスケープされた XML です。1) テキスト領域に配置する 2) クライアントに送信する 3) クライアントに表示する 4) フォームを送信する 5) サーバーに送信する 6) フォームから値を取得する 削除するありとあらゆる逃避。
もう一度言いますが、私は何もエスケープしていません。ブラウザに表示するだけでこうなる!
熟考すべきこと: そもそもこの非エスケープが起こらないようにする方法はありますか? ほぼ有効な XML を安全な方法で "クリーン" にする方法はありますか?
この質問には賞金があります。報奨金を集めるために、正規表現を使用して属性値を手動でエスケープする必要がなく、ユーザーが属性をエスケープする必要がないサードパーティ/オープンソース ツールを使用せずに、ブラウザ ウィンドウで VALID XML を編集する方法を示してください。ラウンドトリップ時に失敗しません(&amp;etc;)