您可以使用模式来区分处理步骤 (<xsl:template match="field" mode="m1">...</xsl:template>
和<xsl:template match="data"><xsl:apply-templates select="field" mode="m1"/></xsl:template>
),但当然这需要创作another.xsl
或编辑它以使用模式。
其次,由于您已将问题标记为 XSLT 2.0,因此您还可以选择使用<xsl:next-match/>
,请参阅http://www.w3.org/TR/xslt20/#element-next-match。
为了给你一个使用模式的例子,主要的样式表是
<xsl:stylesheet version="2.0" exclude-result-prefixes="xs"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:include href="test2013080802.xsl"/>
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html lang="en">
<head>
<title>Example</title>
</head>
<body>
<h1>Example</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="data">
<table>
<thead>
<xsl:apply-templates select="field[1]" mode="thead"/>
</thead>
<tbody>
<xsl:apply-templates/>
</tbody>
</table>
<xsl:apply-templates select="." mode="list"/>
</xsl:template>
<xsl:template match="field" mode="thead">
<tr>
<xsl:apply-templates mode="thead"/>
</tr>
</xsl:template>
<xsl:template match="field/*" mode="thead">
<th><xsl:value-of select="local-name()"/></th>
</xsl:template>
<xsl:template match="field">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="field/*">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
包含的然后使用名为的模式list
:
<xsl:stylesheet version="2.0" exclude-result-prefixes="xs"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/" mode="list">
<html lang="en">
<head>
<title>Example</title>
</head>
<body>
<h1>Example</h1>
<xsl:apply-templates mode="#current"/>
</body>
</html>
</xsl:template>
<xsl:template match="data" mode="list">
<ul>
<xsl:apply-templates mode="#current"/>
</ul>
</xsl:template>
<xsl:template match="field" mode="list">
<li>
<xsl:apply-templates select="*" mode="#current"/>
</li>
</xsl:template>
<xsl:template match="field/*" mode="list">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
那么输出是
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Example</title>
</head>
<body>
<h1>Example</h1>
<table>
<thead>
<tr>
<th>attr</th>
<th>attr</th>
</tr>
</thead>
<tbody>
<tr>
<td>Attribute 1</td>
<td>Attribute 2</td>
</tr>
</tbody>
</table>
<ul>
<li>Attribute 1, Attribute 2</li>
</ul>
</body>
</html>