9

大量の一連のXMLファイルでC#のXmlReaderを使用しようとしていますが、いくつかの選択されたファイルを除いて、すべて適切にフォーマットされています(残念ながら、他の多くのコードが破損するため、変更することはできません。 )。

エラーは、これらの厄介なXMLファイルの特定の部分からのみ発生します。それらをスキップしてもかまいませんが、残りのXMLファイルの読み取りを停止したくありません。

悪い部分は次のようになります。

 <InterestingStuff>
  ...
    <ErrorsHere OptionA|Something = "false" OptionB|SomethingElse = "false"/>
    <OtherInterestingStuff>
    ...
    </OtherInterestingStuff>
</InterestingStuff>

したがって、無効なタグを無視したり、パイプシンボルを無視したりできれば、大丈夫です。

「ErrorsHere」という名前が機能しない場合にXmlReader.Skip()を使用しようとすると、明らかに少し先を読み取って例外がスローされます。

TLDR:XmlReaderを使用して上記のXMLファイルを読み取ることができるようにスキップするにはどうすればよいですか?

編集:

'|'記号を置き換えることを提案する人もいますが、XmlReaderのアイデアは、ファイル全体をロードするのではなく、必要な部分のみをトラバースすることです。ファイルから直接読み取るため、ファイル全体を読み取る余裕がないため、置き換えます。 '|'のすべてのインスタンス そして、もう一度パーツを読んでください:)。

4

3 に答える 3

4

私は過去にこれで少し実験しました。

一般に、入力は単純に整形式である必要があります。基本的なXMLルールが破られると、XmlReaderは回復不能なエラー状態になります。スキーマ検証を回避するのは簡単ですが、ここでは関係ありません。

唯一のオプションは、入力をクリーンアップすることです。これは、ストリーミング方式(カスタムStreamまたはTextReader)で実行できますが、軽い形式の解析が必要になります。有効な位置にパイプシンボルがない場合は、簡単です。

于 2011-07-11T11:27:29.783 に答える
1

XmlReader厳しいです。不適合があると、エラーが発生します。

したがって、独自のxml実装を作成しない限り、これを行うことはできません。不正な形式のデータの修正はおそらく簡単です。

于 2011-07-11T11:16:57.293 に答える
1

同様の状況が発生したとき(XMLファイルではなくHTMLファイルを使用)。しかし、操作パイプラインに入力する前に、各HTMLファイルに正規表現を使用して、不正な形式の部分を削除することになりました。それは便利で、APIで苦労するよりも簡単でした。:)

于 2011-07-11T11:21:40.930 に答える