【问题标题】:Why can't the .NET XML parser take special characters in strings?为什么 .NET XML 解析器不能接受字符串中的特殊字符?
【发布时间】:2012-03-21 20:50:33
【问题描述】:

我正在使用来自System.Xml.Linq 的 XML 解析方法。我已经忽略这个问题很长一段时间了,但最后我想我应该问一下这是为什么。

如果您尝试在字符串属性中放置一个左尖括号<,解析器将抛出异常,因为它认为它正在打开一个新标签。例如:

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

为什么它不能处理这个?任何了解解析器的人都知道这应该不是问题。解析器应该理解它位于一个开放字符串的中间,并且可以将此字符视为非特殊字符。相反,我必须在任何地方都以&amp;lt; 逃避这些。

我能想到的唯一答案是这是一个有意识的选择。设计者认为,在这种情况下,更有可能是有人忘记关闭字符串,而不是他们想要在字符串中包含这个字符。这个假设是正确的还是背后有真正的技术原因,而我是不理解解析器的人?有什么办法可以不用逃避这些角色吗?

【问题讨论】:

  • 我敢打赌是因为他们想要实施标准,而不是一些外行对它的解释。上帝知道处理 XML 的每个其他人并不真正知道什么是有效的,什么是他们糟糕的解析器所接受的,没有必要让它变得更糟。

标签: .net linq-to-xml xml-parsing


【解决方案1】:

这是一个 XML 问题 - &lt; 字符在属性中无效。

您应该在the specification 中定义的属性中转义&lt;&amp;"

微软已经实现了一个符合规范的解析器。

【讨论】:

  • 嗯,这是他们的解析器采用这种方式的一个很好的理由。但这引出了一个问题,为什么规范设计者选择 &lt; 在属性中无效。
  • 谢谢。我想我会避免问这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多