为什么“<” ,“>” ,“和'显示在这个xml示例中

时间:2017-10-20 13:39:33

标签: xml

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

结果:成功

     

文档已成功检查

并没有错误!!但我读到我不能直接在xml中使用特殊的字符,但我应该通过实体(例如:&gt; ===&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所以他认为并且喜欢一个没有值且标签没有关闭的属性,这就是为什么存在问题?

如果是,我可以得出结论,如果我们不犯这个错误,我们可以正常使用特殊字符,是吗?

谢谢你。

1 个答案:

答案 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> - 只是在天空中举手。