我真的不明白为什么在xml标签的属性中不允许使用字符<
。无论如何它必须被双引号或单引号包围,因此解析时不应该是一个问题。 (甚至不是表现明智或任何事情)
我真的很感兴趣以这种烦人的方式约束语言的动机因为我倾向于编写一个XML预处理器,它只是在将文件传递给实际XML之前用转义表单替换属性中所有出现的尖括号解析器,只是为了让他开心。但我想知道我有什么遗失的吗?
答案 0 :(得分:1)
简短(可能只是)答案是,这是在编写XML规范时做出的设计决策。
XML是故意设计的,有一套明确的规则可以严格执行,没有任何可能的含糊之处。其中一条明确的规则是,<
,>
和&
的所有出现都必须转义为实体。
是的,他们可以允许他们不需要逃脱的情况,但是他们没有设计一种语言来让人类更容易写作;他们正在设计它以使计算机能够轻松生成并解析它。规则的严格性就是这样的结果。正确生成的XML将正确解析,因为没有歧义。
无论如何,这是一个已经做出的决定,永远不会改变。这就是XML的方式,所以这些是你必须遵循的规则。
有一些令人惊讶的系统会产生“XML”,但这些规则无法实现。这很奇怪,因为几乎每种语言都有一个API来生成正确形成的XML。因此,人们只能假设已经编写了生成破碎XML的任何系统以“手动”生成它;即不使用语言提供的API。这是一个直接的红旗,系统由开发人员编写,他真的不知道他在做什么。这么多系统存在的事实是对广泛世界中代码的一般质量的可怕起诉。
答案 1 :(得分:0)
如果允许<
和>
内部属性,
<tag attribute="value'/> <tag attribute='value"/>
将是有效的xml,其中最可能不代表作者的意图。虽然这种错误永远不会由机器造成,但在编写此代码并且未获得解析器的预期解释后,人类可能会暂时混淆。因此,不允许使用这些字符的原因只能是对人类的可读性。