使用c#3编译变换以下似乎工作得很好......
<xsl:choose>
<xsl:when test="$valA > $valB">
<xsl:value-of select="$maxUnder" />
</xsl:when>
<xsl:when test="$valA < $valC">
<xsl:value-of select="$maxOver" />
</xsl:when>
</xsl:choose>
但是,如果我敢用<
代替<
,则会出错:
<xsl:choose>
<xsl:when test="$valA > $valB">
<xsl:value-of select="$maxUnder" />
</xsl:when>
<xsl:when test="$valA < $valC">
<xsl:value-of select="$maxOver" />
</xsl:when>
</xsl:choose>
System.Xml.XmlException:'&lt;', 十六进制值0x3C,无效 属性字符。
那么为什么>
可以,而不是<
?
答案 0 :(得分:15)
因为>
不是XML中的保留字符,但<
是。
来自section 2.4 of the XML 1.0 spec (5th edition):
&符号(
&
)和 不得出现左尖括号(<
) 在他们的字面形式,除了 用作标记分隔符,或用作标记分隔符 评论,处理指令或 CDATA部分。如果需要它们 在其他地方,他们必须逃脱使用 数字字符引用或 字符串“&
”和“<
” 分别。直角支架 (>
)可以使用。来表示 字符串“>
”,并且必须为 兼容性,使用其中一个进行转义 “>
”或字符引用时 它出现在字符串“]]>
”中 内容,当该字符串不是 标记CDATA部分的结尾。