2012-04-16 19 views
1

XMLファイルにデータを格納するプログラムを作成しています。人々はXMLを書くときに、-というコメントを終了するような微妙な間違いを犯すことがありますので、のように見えるか、属性内に</>を追加します。もちろん、XMLはまだ正常に読み込めますが、このテキストをXmlDocumentに入力しようとすると構文エラーが発生します(解析されません)。XmlDocumentの解析があまり厳しくないようにする方法はありますか?

XmlDocumentをあまり厳しくしないで、ドキュメントを解析不能にしない標準の違反を無視する方法はありますか?例えば、<!-- comment --->は、標準仕様とは反対の末尾に-が含まれていても、依然としてコメントであることが明らかです。

+1

つまり、HTMLをさらに作成します。 –

+2

あなたは間違った問題を解決しています。 XMLを生成するツールを人々に手作りしてもらう代わりに提供します。 XMLは、平均的なユーザーが手作業で編集するようには設計されていません。 – Quentin

+0

slopping入力を許可し始めると、別のソフトウェアでXMLファイルの1つを開こうとすると失敗します。 – Quentin

答えて

2

いいえ、XMLパーサーは無効なXML入力を拒否することが予想されます。

無効なファイルを前処理してTidyで試すことができますが、入力が有効であることを確認することをお勧めします。

使用例を以下に示します。あなたのコメントを修正してエスケープしますが、余分なオープニング<は事態をより頻繁に壊してしまいます。その場合、単に質問するのはあまりにも多いです。

Tidy tidy = new Tidy(); 
tidy.Options.FixComments = true; 
tidy.Options.XmlTags = true; 
tidy.Options.XmlOut = true; 

string invalid = "<root>< <!--comment--->></root>"; 
MemoryStream input = new MemoryStream(Encoding.UTF8.GetBytes(invalid)); 
MemoryStream output = new MemoryStream(); 
tidy.Parse(input, output, new TidyMessageCollection()); 
// TODO check the messages 

string repaired = Encoding.UTF8.GetString(output.ToArray()); 
+0

「どうすればいいですか?ユーザーはすでにXMLファイルを作成していますが、どうすれば正しいと思いますか? – Istrebitel

+0

XMLパーサーのユーザーは、有効なXMLだけを渡す必要があります(そうしないと、素晴らしい例外がスローされます)。無効なものしか持っていない場合は、パーサーに渡す前に修正するか、XMLパーサーをまったく使用できません。 – voidengine

+0

私はそれをundestand。私は "パーザ" MAYBEは単純な間違いを修正することを含んでいると思ったので、ホイールを発明しないために私は尋ねました。それがなければ、当然私は解決者を自分で作成します – Istrebitel

7

いいえ、それは良いことです。

XMLは厳密な形式です。ここでの解決策は、正しい(修正された)入力を持つことです。

すべてのXMLツールは設計上非常に厄介です。 XMLReeaderを使用して不具合の要素を修正したり拒否したりするのはちょっと不運かもしれません。

しかし、XMLを適切なツールで作成する方がはるかに優れています。それらのうちのいくつかは名前がついていますXmlPad

+0

まあ、そうではありません。コンピュータは人を奉仕するように作られています。はい、人がXMLファイルを作成するときに間違いを犯しましたが、今は自分のプログラムがそれを受け入れて間違いを修正してもらいたいと思います。あまりにも悪い.Netフレームワークはそれを行う方法を知らない。私は手動でXmlを解析しなければならないようです... – Istrebitel

+1

人はメモ帳でXMLを作成すべきではありません。エラーがあります。 [XmlPad](https://www.google.nl/search?q=xmlpad&ie=utf-8&oe=utf-8)をダウンロードしてください。 –

+1

C#コンパイラは 'for'の代わりに' fro'を書くとエラーになります。 IDEがそれを修正しないのは悪いことですか? – Default

関連する問題