XSL模式,它做什么?

时间:2013-12-16 14:29:12

标签: xml xslt

我是XSL的新手,我在完全理解mode属性方面遇到了一些问题。我认为这是一个可选功能,但是,我最近参与的一个项目使用它来生成电子邮件活动,以一种批量方式区分顶级故事和普通故事。

该模式似乎对这些物体的外观产生了深远的影响。例如,特定模式似乎可以创建背景颜色和固定的表格宽度。尽管如此,我无法确定模式在何处或如何决定。一旦我改变或移除模式,所有地狱似乎都会破裂,布局很快就会被破坏。

我很欣赏这听起来很简短,但是对于如何创建模式以及相关的样式将会受到赞赏的任何帮助。

1 个答案:

答案 0 :(得分:2)

因为您没有提供任何输入XML或示例XSLT,所以此示例可能不适用于您的解决方案/请求,但它会让您了解mode的工作原理。

输入XML

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <set>
        <big>no</big>
        <field1>Test</field1>
        <field2>Value</field2>
    </set>
    <set>
        <big>yes</big>
        <field1>Test 2</field1>
        <field2>Value 2</field2>
    </set>
    <set>
        <big>no</big>
        <field1>Test 3</field1>
        <field2>Value 3</field2>
    </set>
</data>

<强> XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:apply-templates select="@*|node()" />
    </xsl:template>

    <xsl:template match="data">
        <html>
            <head>
                <title>TEST</title>
            </head>
            <body>
                <table>
                    <xsl:apply-templates select="set[big='yes']" mode="upper" />
                    <xsl:apply-templates select="set[big='no']" mode="lower" />
                </table>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="set" mode="upper">
        <tr>
            <td><xsl:value-of select="upper-case(field1)" /></td>
            <td><xsl:value-of select="upper-case(field2)" /></td>
        </tr>
    </xsl:template>

    <xsl:template match="set" mode="lower">
        <tr>
            <td><xsl:value-of select="lower-case(field1)" /></td>
            <td><xsl:value-of select="lower-case(field2)" /></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

<强>输出

<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <title>TEST</title>
    </head>
    <body>
        <table>
            <tr>
                <td>TEST 2</td>
                <td>VALUE 2</td>
            </tr>
            <tr>
                <td>test</td>
                <td>value</td>
            </tr>
            <tr>
                <td>test 3</td>
                <td>value 3</td>
            </tr>
        </table>
    </body>
</html>

简要解释

使用以下代码:

<xsl:apply-templates select="set[big='yes']" mode="upper" />
<xsl:apply-templates select="set[big='no']" mode="lower" />

您决定应在所选节点上应用哪种模式。在模板匹配中,您定义了以下模式:

<xsl:template match="set" mode="upper">
<xsl:template match="set" mode="lower">