2011-06-24 23 views
1

整形されていないXML文書を解析していて、その中に "&"が含まれていて、そのノードに "&"という構文解析が正しくないと解析しています。"£"を含むXMlの解析

<abcnode>&pound;70.00-&pound;90.00</abcnode>

このノードの値を取得しようとすると「70.00-」が返されます。

私はこのxmlを制御できないので、この不正なxmlを解析する必要があります。

私はURLからxmlをロードするのにXmlTextReader reader = new XmlTextReader(url);を使用しています。

&pound;をxmlに置き換えて問題を解決できますが、このxmlは非常に大きいため、無効な文字を置き換えるためにファイルをダウンロードしたくない場合があります(パフォーマンス上の理由から)。

XmlTextReaderを使用してこのxmlを解析する方法はありますか?

+1

私は好きではありませんが、「整形式ではないXML文書」はありません。うまく構成されていない場合は、XMLではありません。エンティティ '£'の定義がある場合、その文書は正しい形式のXMLです。そのような定義がない場合、それは整形式ではなくXMLではありません。 –

答えて

2

XmlTextReaderから読み取ることがTextReader引数を取りますので、あなたは、TextReaderを継承するクラスを実装するすべてのReadXXX()メソッドをオーバーライドし、オーバーライドで無効な文字を修復することができるかもしれません。

EDIT<!ENTITY pound "&#163;">を追加するために読まれるよう別の方法としては、ドキュメントの残りの部分は、整形式にするべき、XMLのDOCTYPEをハック可能性があります。おそらくXMLを変更することなく、XmlTextReader自体にエンティティを追加する別のトリックがありますが、私はそれを認識していません。

0

これは整形式ではないと言うのが正しいのでしょうか?おそらく、それは正しく解析されていますが、エンティティが明示的にノードとして表示され、アプリケーションコードがエンティティノードを無視しているDOMツリーを構築していますか?