2012-03-03 37 views
0

我正在使用System.Xml.Linq的XML解析方法。我一直在忽略這個問題已經有一段時間了,但最終我想問問爲什麼會這樣。爲什麼.NET XML解析器不能在字符串中使用特殊字符?

如果您嘗試在字符串屬性中放置一個開角尖括號<,解析器將會拋出一個異常,因爲它認爲它打開了一個新標記。例如:

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

爲什麼它不能處理這個問題?任何知道解析器的人都知道這應該不成問題。解析器應該理解它在一個開放字符串的中間,並且可以將這個字符視爲不特殊。相反,我必須將這些作爲&lt;無處不在。

我能想到的唯一答案就是這是一個有意識的選擇。設計師決定,在這種情況下,更有可能出現某人忘記關閉字符串而不是他們想要字符串中的這個字符的錯誤。這個假設是否正確或者是否存在背後的真正技術原因,我是不懂解析器的人?有什麼我可以做的,不必逃避這些角色?

+0

我打賭是因爲他們想實施這個標準,而不是一些外行人對它的解釋。上帝知道每個處理XML的人都不知道什麼是有效的,他們糟糕的解析器接受了什麼,沒有必要讓它變得更糟。 – delnan 2012-03-03 18:40:00

回答

3

這是一個XML問題 - <字符在屬性中無效。

您應該轉義<,&"的屬性,如the specification中所定義。

Microsoft已經實現了符合規範的解析器。

+0

那麼這是他們的解析器是這樣的一個很好的理由。但是這引出了爲什麼規格設計師選擇'<在屬性中無效的問題。 – Tesserex 2012-03-03 18:43:23

+1

@Tesserex - 這是一個_completely_不同的問題... – Oded 2012-03-03 18:43:52

+0

謝謝。我想我不會問這個問題。 – Tesserex 2012-03-04 03:59:19