<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<programme>
<condition> if (a>b) and (c>d) echo "sorry"; </condition>
</programme>
结果:成功
文档已成功检查
并没有错误!!但我读到我不能直接在xml中使用特殊的字符,但我应该通过实体(例如:&gt; ===&gt; >
等)
为什么没有显示错误?
但是当我尝试这个例子(只添加两个括号)时显示错误
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<programme>
<condition> if ( a<b and b>d ) </condition>
</programme>
错误:'b'是一个意外的令牌。预期的标记是'='。 3号线, 第30位。
这是因为我们打开了一个标签<b
所以他认为并且喜欢一个没有值且标签没有关闭的属性,这就是为什么存在问题?
如果是,我可以得出结论,如果我们不犯这个错误,我们可以正常使用特殊字符,是吗?
谢谢你。
答案 0 :(得分:2)
请参阅示例中的>
字符没有混淆(通常是文本节点中的情况):它不能被视为标记的结尾(因为没有对应的<
符号)。这就是解析器处理它的原因。
以下是the XML FAQ所说的内容:
除了不可见的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
,允许空格作为分隔符。但它取而代之的是<xsl:for-each select="@*">
<td style="text-align:center">
<xsl:value-of select="." />
</td>
</xsl:for-each>
- 只是在天空中举手。