xml - 防止 XSL 1.0 中的 2^n - 1 条件

标签 xml xslt xml-parsing xslt-1.0

给定以下 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/

相关文章:

java - 实体 "uuml"已被引用,但未声明 - XMLStreamException

XML 架构错误 : Required white space was missing

android - 制作动态表格(最佳方法)

html - 使用 XML/XSL 解析器定义 CSS 样式

xml - 静态内容但动态内容中的 XSL-FO 页脚?

image - 异步加载的图像在同一 View 内不可重用

java - 如何添加 onClick 到此?

android - 仍然错误 Android : Unable to start activity ComponentInfo{/com. } : android. view.InflateException: Binary XML file line Error inflating class fragment

xml - XSLT:CSV(或平面文件,或纯文本)到 XML

C# XPath 找不到任何东西