2012-03-03 41 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