2009-07-30 7 views
3

私たちは、現在の配布でアプリケーションによって生成されたさまざまなXMLファイルを持っています。これらのファイルの中には無効な文字が含まれているものがあり、すべての検証がオフになってからXmlDocumentインスタンスでのみXDocumentでない限り、ほとんどのインスタンスで読み込まれない無効なXMLがレンダリングされます。非スタンダード化されたXMLをロードするにはどうすればよいですか?

このアプリは既にですので、そこにはというファイルがありますので、対応する必要があります。さて、私は何を探すのかを知っているタイプをSanitizerに追加し続けることができましたが、ドキュメントをロードしようとする前に修正する方法がありましたが、誰かがすでにこれを行ったかもしれない効率的な方法(例えば、SanitizedXmlReaderクラス)。

This question同じトピックについては触れていますが、満足のいく回答は見つかりませんでした。私たちが望むのは、XMLファイル内のどこでも無効なコンテンツを削除することだけです(CDATAのみで有効なデータか、QNameで使用されていないデータではなく)。

"ほぼ" XMLファイルを "少なくとも無効な文字はありません"というXMLファイルに変換できるようなものはありますか?もしそうでなければ、私たち自身を圧倒することが次の選択肢です。この例では、すべての状況でどの文字が違法であるかを判断するためにXML仕様を解釈する時間を費やすのではなく、最終的なリストがどこかにありますか?

答えて

3

私は、このリンクは、この問題に役立つかもしれないと思う - http://seattlesoftware.wordpress.com/tag/hexadecimal-value-0x-is-an-invalid-character/

+0

素晴らしいリソースです!ありがとう。あなたの時間があれば、あなたの答えに関連する部分を引用する価値があります。再度、感謝します。 –

+0

@AVDリンク先のページは有効ではなくなったようですが、現在は404です。 – jac

2

私は安っぽいHTMLコードをロードするために数年前にSGMLReaderを使用しました。無効なXMLを解析するのにも役立ちます。

PS:その間にNuGet packageがあり、ソースはGithubにあります。

+0

ありがとうございます!私はSGMLReaderについて忘れてしまった。 –

+0

あなたは答えを試しましたか?私は次の将来、自分自身の厄介なサードパーティのXMLを自分自身で読む必要があるからです。 –

3

問題

あなたがあなた自身を書き終わる行う場合は、有効である文字知ることは間違いなく、少しトリッキーです。

XML 1.1はルールを変更しましたが、誰もそれを使用していないと仮定しましょう。

XML 1.0 revision 5もまた、earlier versionsからルールを変更しましたが、ドキュメント自体から何らかの形で伝えることはできません。これは、Unicodeに関するいくつかのことを単純化しましたが、元の仕様書著者の勧告に反するものでした。この問題は存在しないふりをしましょう。

回答

は、Javaを使用すると、その構築のために有効である文字を決定するために使用できる方法があり、この素敵な小さなクラス、XmlCharを、持っています。 .Netはありませんが、MonoプロジェクトにはSystem.Xml.XmlCharのソースが含まれています。

おそらくどこでも許可されていないの文字をすべて除外することから始めることができます。上記のMonoクラスのメソッドXmlChar.IsValid(char c)が役に立ちます。

アプリケーションが生成する他の種類の悪いXMLを知ることは興味深いでしょう。

+0

ありがとうございます。 「間違いなくどこでも許可されていない」文字は、私が本当に取り組んでいるものです。他のものは後で対処できる軽度の刺激物です。 –

関連する問題