将XSLT合并到一个文件中并分别调用与特定内容匹配的每个模板

时间:2014-07-14 06:40:17

标签: xslt

我是以下示例XML。

XML1

<root num="1">
 <abc></abc>
 <cde></cde>
 <def></def>
</root>

XML2

<root num="2">
 <xyz></xyz>
 <cft></cft>
 <vft></vft>
</root>

XML3

<root num="3">
 <dfg></dfg>
 <mnb></mnb>
 <gft></gft>
<root>

我有3个不同的XSLT,每个都对应XML。

我想实现以下目标。 制作单个XSLT并根据根号调用模板。类似下面的东西。

<xsl:if test="root[@num="1"]>
<!--Call the template matching root 1-->
</xsl:if>
<xsl:if test="root[@num="2"]>
<!--Call the template matching root 2-->
</xsl:if>
<xsl:if test="root[@num="3"]>
<!--Call the template matching root 3-->
</xsl:if>

我只想将所有XSLT放在一个XSLT中,请让我知道我该怎么做。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用元素。

该元素包含匹配指定节点时要应用的规则。

match属性用于将模板与XML元素相关联。 match属性还可用于为XML文档的整个分支定义模板(即match =“/”定义整个文档)。

注意:是顶级元素。

示例:

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

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <xsl:apply-templates/>
  </body>
  </html>
</xsl:template>

<xsl:template match="cd">
  <p>
  <xsl:apply-templates select="title"/>
  <xsl:apply-templates select="artist"/>
  </p>
</xsl:template>

<xsl:template match="title">
  Title: <span style="color:#ff0000">
  <xsl:value-of select="."/></span>
  <br />
</xsl:template>

<xsl:template match="artist">
  Artist: <span style="color:#00ff00">
  <xsl:value-of select="."/></span>
  <br />
</xsl:template>

</xsl:stylesheet> 

这取自http://www.w3schools.com/xsl/el_template.asp