我不清楚 XML 字符验证中不对称背后的逻辑。
例如,后续的 XML 无效(如我所料):
<xml>
<value attr="<">my value</value>
</xml>
<xml>
<value attr="attribute">my value is < than</value>
</xml>
但是那些 XML 是有效的
<xml>
<value attr=">">my value</value>
</xml>
<xml>
<value attr="attribute">my value is > than</value>
</xml>
我期待的是任何角色都喜欢
<>&
应始终被视为非法。
所以我想问一下那个选择的原因是什么(> 可以但 < 不是)。
最佳答案
编写语法规则是为了避免解析器必须提前扫描才能正确解释字符的需要。
<
之间的区别和 >
是遇到 <
时的解析器不向前扫描就不知道是标签的开头还是LESS THAN字符,而遇到>
时,解析器根据其扫描历史(无需提前扫描)知道它应该被解释为标记结尾还是大于字符。
另请参阅:
- Simplified XML Escaping
- Michael Kay 的 helpful comment关于 SGML 兼容性和规则统一性。
关于xml - 为什么 XML 字符约束是不对称的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584190/