使用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>
但是,如果我敢于使用<代替& lt;它给出了一个错误......
<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: ‘<‘,
hexadecimal value 0x3C,is an invalid
attribute character.
那么为什么>好的而不是< ?
因为>不是XML中的保留字符,但是<是. 从
section 2.4 of the XML 1.0 spec (5th edition)开始:
The ampersand character (
&
) and the
left angle bracket (<
) must not appear
in their literal form,except when
used as markup delimiters,or within a
comment,a processing instruction,or
a CDATA section. If they are needed
elsewhere,they must be escaped using
either numeric character references or
the strings “&
” and “<
”
respectively. The right angle bracket
(>
) may be represented using the
string “>
“,and must,for
compatibility,be escaped using either
“>
” or a character reference when
it appears in the string “]]>
” in content,when that string is not marking the end of a CDATA section.