我是XSL的新手,我在完全理解mode
属性方面遇到了一些问题。我认为这是一个可选功能,但是,我最近参与的一个项目使用它来生成电子邮件活动,以一种批量方式区分顶级故事和普通故事。
该模式似乎对这些物体的外观产生了深远的影响。例如,特定模式似乎可以创建背景颜色和固定的表格宽度。尽管如此,我无法确定模式在何处或如何决定。一旦我改变或移除模式,所有地狱似乎都会破裂,布局很快就会被破坏。
我很欣赏这听起来很简短,但是对于如何创建模式以及相关的样式将会受到赞赏的任何帮助。
答案 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">