在xpath中为什么我可以使用大于符号>但不小于<

gin*_*boy 6 xml xslt syntax xpath

使用c#3编译变换以下似乎工作得很好......

<xsl:choose>
    <xsl:when test="$valA > $valB">
        <xsl:value-of select="$maxUnder" />
    </xsl:when>
    <xsl:when test="$valA &lt; $valC">
        <xsl:value-of select="$maxOver" />
    </xsl:when>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)

但是,如果我敢用它<代替&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>
Run Code Online (Sandbox Code Playgroud)

System.Xml.XmlException:'<',十六进制值0x3C,是无效的属性字符.

那么为什么>没有<呢?

Jon*_*eet 15

因为>不是XML中的保留字符,而是<.

XML 1.0规范(第5版)的2.4节开始:

&符号(&)和左尖括号(<)不得以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分.如果在其他地方需要它们,则必须分别使用数字字符引用或字符串" &amp;"和" &lt;" 来转义它们.右尖括号(>)可以使用字符串" &gt;" 来表示,并且为了兼容性,&gt;当它出现]]>在内容中的字符串" "中时,必须使用" "或字符引用进行转义,当该字符串未标记结束时CDATA部分.

  • 此外,您可以使用http://en.wikipedia.org/wiki/Yoda_conditions来消除对<的所有需求.`$ valC> $ valA`在逻辑上是等价的,并且不需要转义运算符.你是否认为`1> foo`的可读性比`foo&lt;更多或更少都是个人选择的问题.然而,1` (3认同)