3

DelphiXE2を使用してプログラムをサードパーティのサービスと統合しようとしています。私が遭遇している問題は、サービスが私に送信するXMLドキュメント内の値をエスケープしていないことです。

これは彼らの「サンプル」xmlドキュメントの1つです

<plans type="array">
  <plan>
    <id type="integer">1</id>
    <series-title>A New Plan</series-title>
    <dates>January 16 & 17, 2010</dates>
   <plan-title>A New Plan For Your Family</plan-title>
 </plan>
 ...
</plans>

私の当初の計画は、すべてのデータをタグでラップすることCDATAでしたが、それは理想的な解決策ではないようです。

&また、文字を検索して置き換えることも考えましたが、無効なxml文字ごとに検索と置換を行うことを含め、ユーザー入力をエスケープすることはできません。これも悪い考えのようです&amp;<>

無効なxmlドキュメントを処理する方法についての提案はありますか?

4

3 に答える 3

13

これらのドキュメントを「XML」と呼ぶことを拒否することから始めます。これらはXMLではありません。

多くの人がXMLを採用し、それから利益を得ていることをサプライヤーに説得してください。彼らもそうするのは良い考えです。

サプライヤがXMLを送信しているという印象を受けている場合は、正しく配置してください。ほとんどXMLであることは役に立ちません。これは、コンパイルされないJavaコードを送信するようなものです。

于 2012-08-20T18:59:39.600 に答える
6

無効なXMLドキュメントは無効です。それらに対処する正しい方法は、明確なエラーメッセージを表示し、「XML」を送信する人にバグを修正してもらうことです。

于 2012-08-20T18:36:17.460 に答える
2

サービスから本当に有効なXMLを取得することが問題外の場合は、Tidyなどを介してXMLを実行し、結果のドキュメントを解析すると 役立つ場合があります。

tidy --xml-input true --xml-output true input.xml

このようなファイルを実行するためだけにファイルをディスクに書き込みたくない場合は、stdinを介してドキュメントを整理し、stdoutとstderrで結果を受け取ることもできます。

これを行うことには常にリスクがありますが、ソースドキュメントの「不正」によっては、「クリーンアップされた」ドキュメントに属性や要素などが欠落している可能性が常にあります。

于 2012-08-20T18:50:40.193 に答える