为什么在此 XML 示例中显示"<"、">"、""和"?

  • 本文关键字:显示 XML xml
  • 更新时间 :
  • 英文 :

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<programme>
<condition> if (a>b) and (c>d) echo "sorry"; </condition>
</programme>

结果:成功

文档已成功检查

没有错误!!但我读到我不能直接在XML中使用特殊字符,但我应该通过实体(例如:>===>&gt;等)

为什么没有显示任何错误?

但当我尝试这个例子(只添加了两个括号)时,会显示一个错误:

<?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——而且只是举起了双手。

最新更新