2012-01-03 12 views
1

リモート(Java)WebサービスからC#コンソールアプリケーションにXMLが送られてきましたが、これはストアドプロシージャを介してMicrosoft SQL ServerのXML列に書き込まれます。時々、XMLはどこかに悪いキャラクターを持ち、SQL Serverは問題がどこにあるかに関する十分な情報を提供していません。XMLを評価する不正な文字を見つけるか?

データベース書き込みが行われる前にXMLを評価したいと思います。もちろん、XSDはありません。

データベースに書き込む前に、XMLのすべての部分を「標準適合」として評価する良い方法はありますか?私は.NET 4.0、C#を使用しています。

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

+0

どのようなエラーが表示されますか?パラメータを使用していますか? – SLaks

+0

これをXMLドキュメントなどに読み込むだけです。例外をトラップし、データをquarntineします。あなたがspにそれを発射したときに賢明にエンコードされていることに混乱しているのとは対照的に、Webサービスからそれを取得したとき、それが壊れたと仮定します。 –

+1

'XmlReader.Create()'でドキュメントを開き、 'XmlReader.Read()'ですべてのノードをループしてください。 –

答えて

-3

あなたは少し役立つかもしれないあなたのXMLを消毒試すことができます:私はまだ不明フィルタリングを推奨しますが(http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/

だけは本当にリンクは十分でも役に立つことはないだろうという、ほとんどの時間、フィルタの無効な文字が役立ちますセキュリティのための文字)。

タグが有効かどうかをチェックするには、try catchを使用することができます。 try catchが1行目の問題を返す場合、問題はあなたのxmlにルート要素がないことがありますか?または、あなたのエンコーディングがxmlドキュメントに対して正しくない可能性があります。彼らは別のエラーを返す必要があります。

+2

-1:サニタイズ用のごみはまだゴミを生成します。文書の作者が悪い文字をどのように表しているかは分かりません。 –

+0

サニタイズされた文字を自然に削除する必要はありません。コメントのように扱われるタグに変換することも、見つかった行に例外を表示することもできます。例がフィルタリングの方法の1つを示しているからといって、削除またはsantizeする必要はありません。あなたはそれらの文字で何でもできます – Dessus

+0

それらが存在する理由を理解する以外は何も。 –

0

可能性がある場合は、サードパーティサービスで取得するすべてのXML datにXMLスキーマ検証を実行することをお勧めします。

Xmlスキーマ検証では、XML文書のすべての要素が、定義された契約に対して有効であることが保証されます。

実稼働環境では、オーバーヘッドが発生する可能性があるため、Xmlスキーマ検証をオプションにすることを検討する必要があります。しかし、開発環境やテスト環境では、サードパーティのすべてのサービスから詳細検証エラー情報を取得することは非常に有益です。

関連する問題