给定以下 XML:
<root>
Pacman <format bold="1" italic="1">rules</format>!
</root>
什么是比以下更好的实现,它会产生 2n-1 个可能的条件语句?
<xsl:template match="format">
<xsl:choose>
<xsl:when test="@bold='1' and @italic='1'">
<b><i><xsl:value-of-select="."/></i></b>
</xsl:when>
<xsl:when test="@bold='1'">
<b><xsl:value-of-select="."/></b>
</xsl:when>
<xsl:when test="@italic='1'">
<i><xsl:value-of-select="."/></i>
</xsl:when>
</xsl:choose>
</xsl:template>
您可以看到,如果我想添加一个新的可能属性(例如 underline="1"
),则会出现一个巨大的问题,这将导致此处产生 4 个新条件。
编辑:还假设我无法使用 CSS 类,并且必须使用 HTML 标签进行样式设置。
最佳答案
我的 XSLT 生锈了,铰链不动,但我想你可以使用 <xsl:call-template … />
一次处理一个属性,每个属性使用一个模板。
以下内容可能有一些非常明显的错误,但希望它能给您带来共鸣。
<xsl:template name="bold">
<xsl:choose>
<xsl:when test="@bold='1'">
<b><xsl:call-template name="italics" /></b>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="italics" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="italics">
…
</xsl:template>
关于xml - 防止 XSL 1.0 中的 2^n - 1 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830930/