小于运算符会导致xsl-if中的错误"格式不正确"

Zab*_*bba 12 xml xslt

我正在阅读w3cschools XSLT教程,我在这个页面:xsl-if.

在该页面上(红色)是文本<xsl:if test="price &gt; 10">.这有效.我修改了要使用的代码,"&lt;"并且工作正常.

我测试过<xsl:if test="price > 10">(注意使用>而不是&gt;).这也有效.

但这失败了: <xsl:if test="price < 10">.错误是XML Parsing Error: not well-formed ,它指向<表达式中的符号.

如果>符号工作正常,为什么使用<失败?(我正在使用FireFox)

Dim*_*hev 12

如果>符号工作正常,为什么使用<fail?(我正在使用FireFox)

因为"<"字符是属性值中非法的少数字符之一(它是标记字符的开头).

来自XML规范

[10]    AttValue    ::=    '"' ([^<&"] | Reference)* '"' 
Run Code Online (Sandbox Code Playgroud)

可以清楚地看到,任何属性值都不允许使用"<"和"&"字符.

更新:正如@Tomalak所注意到的,上面应该是:

可以清楚地看到,"<"和"&"字符(除非后者是实体引用或字符引用的一部分)在任何属性值中都是不允许的.

  • @Tomalak:`&amp;`是一个实体引用,字符`&`为**替换文本**.所以,使用这个文件`<elem attr ="&gt;"/>`,这个函数调用`contains(/ elem/@ attr,'&amp;')`总是评估为false. (3认同)
  • @Tomalak:属性值中不允许使用`&`字符.实体引用中没有"&"字符,因为实体引用本身就是一个实体.因此在属性规范化面中处理(通过XML解析器或某些API) (2认同)

小智 6

您还可以在w3schools上看到答案:

http://www.w3schools.com/xmL/xml_syntax.asp

实体参考

某些字符在XML中具有特殊含义.

如果在XML元素中放置像"<"这样的字符,它将生成错误,因为解析器将其解释为新元素的开头.