2012-03-03 22 views
0

私はSystem.Xml.LinqのXML解析メソッドを使用しています。私はかなり長い間この問題を無視してきましたが、なぜこれがどういうか尋ねるべきだと私は考えました。.NET XMLパーサーが文字列内で特殊文字を使用できないのはなぜですか?

開いている角括弧<を文字列属性に入れてみると、パーサーは新しいタグを開いていると考えて例外をスローします。例:

<Foo text="This is my <sample> text" /> 

なぜこれを処理できないのですか?パーサーについて何も知らない人なら、これは問題ではないはずです。パーサーは開いている文字列の途中にあることを理解し、この文字を特別なものとして扱うことができます。代わりに、私は&lt;としてこれらをエスケープする必要があります。

私が考えることができる唯一の答えは、これが意識的な選択であるということでした。デザイナーは、この状況では、誰かが文字列を閉じるのを忘れていて、文字列の中にこの文字が欲しいと誤っている可能性が高いと判断しました。この仮説は正しいのでしょうか、それとも本当に技術的な理由がありますか?私はパーサを理解していない人ですか?そして、私はこれらの文字をエスケープする必要はありません何かがありますか?

+0

私は賭けたいと思っていました。彼らは標準を実装したいと思っていました。 XMLを扱う人は、他のすべての人が、何が正当なものであるのか、また、自分の馬鹿げたパーサーが受け入れられるのかを本当に知っているわけではないので、悪化させる必要はありません。 – delnan

答えて

3

これはXMLの問題です。<文字は属性内では無効です。

the specificationで定義されているあなたは、属性で<&"をエスケープする必要があります。

マイクロソフトでは、仕様に準拠するパーサーを実装しています。

+0

これはパーサがそのようになる理由です。しかし、それはなぜ仕様設計者が '<'を属性で無効にするのかを問うものです。 – Tesserex

+1

@Tesserex - これは完全に別の質問です... – Oded

+0

ありがとうございます。私はその質問を控えるだろうと思う。 – Tesserex

関連する問題