<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<programme>
<condition> if (a>b) and (c>d) echo "sorry"; </condition>
</programme>
结果:成功
文档已成功检查
没有错误!!但我读到我不能直接在XML中使用特殊字符,但我应该通过实体(例如:>===>>
等)
为什么没有显示任何错误?
但当我尝试这个例子(只添加了两个括号)时,会显示一个错误:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<programme>
<condition> if ( a<b and b>d ) </condition>
</programme>
错误:'b'是一个意外的令牌。所需的标记为"="。第3行,位置30。
这是因为我们打开了一个标记<b
,所以它考虑并喜欢没有值的属性,并且标记没有关闭,所以这就是问题存在的原因吗?
如果是的话,我可以得出结论,如果我们不犯这个错误,我们可以正常使用特殊字符,对吧?
在您的示例中,>
字符没有混淆(通常是文本节点中的情况):它不能被视为标记的末尾(因为没有相应的<
符号)。这就是解析器处理它的原因
以下是XML常见问题解答对它的描述:
除了不可见的ASCII控制字符(你不能type),所有其他字符都只是普通文本。货币符号(欧元,£,$,ƒ,₨,Ƀ和其他),所有标点符号(,
<
和&
除外),以及任何语言或文字中的所有其他字母、符号和符号系统只是文本(假设您有正确的字符编码)。
至于错误,请仔细查看其文本:
'b' is an unexpected token. The expected token is '='. Line 3, position 30.
重点是,它不是第一个b
,而是第二个。以下是解析器如何处理<b and b>
的一种可能方式:
<b
被视为打开标签and
被视为属性名称
。。。现在解析器等待=
令牌出现在某个地方,因为正常的属性语法是%ATTR_NAME% = %ATTR_VALUE%
,允许空白作为分隔符。但它却得到了b
——而且只是举起了双手。