任何熟悉 XML 和 XSLT 的人: 在我的 XMLl 中,我尝试使用下面的 XSLT 为两个具有不同属性的不同“p”标签着色:
<xsl:template match="p">
<xsl:choose>
<xsl: when test="p/@color='red'"><span style="color:#00ff00"><xsl:value-of select="p"/></span></xsl:when>
<xsl: when test="p/@color='green'"> <span style="color:#ff0000"> <xsl:value-of select="p"/></span></xsl:when>
<xsl: otherwise><xsl:value-of select="p"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
XML 看起来像这样
<html>
<body>
<p color="red">Last paragraph incorrect</p>
<p>A Second paragraph</p>
<p color="green">The First paragraph</p>
<p color="green">Anthony Gonsalwes</p>
</body>
<body>
<l color="green"> kumarswamy</l>
</body>
</html>
您的模板匹配
p
。这将为您在模板内使用的相对路径建立上下文。这意味着您的情况:
<xsl:when test="p/@color='red'">
仅当当前 p
具有子
p
元素且
color
属性值为“red”时,才会为 true。当然,对于 XML 中的任何
p
元素来说,情况并非如此。你应该进行测试:
<xsl:when test="@color='red'">
而不是:
<xsl:value-of select="p"/>
你需要:
<xsl:value-of select="."/>