在下面的示例XSL转换文件中,"记录"和"事件"模板几乎相同。它们在模板的顶部和底部有一些不同的文本,但中间有重复的文本,两者相同。
有没有办法可以将相同的文本放在另一个文件中,或者(理想情况下)放在同一个文件中的另一个块中,然后在"记录"中添加单行refence / include。和"事件"模板来引用该代码?
这样,我可以拥有一段只写一次的代码,但会被多次引用。以下是一个简化的例子。在我的实际工作中,重复的代码块要大得多,并且会重复多次。
谢谢。
<?xml version="1.0" encoding="UTF-8"?>
<!-- First define the style sheet format to be used -->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xi="http://www.w3.org/2001/XInclude"
exclude-result-prefixes='xsl xi'
type="text/xsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="record"/>
<xsl:apply-templates select="event"/>
</xsl:template>
<xsl:template match="event">
[Event-specific XSL/XML...]<xsl:text>
</xsl:text><Block name="{@name}" mutable="true"><xsl:text>
</xsl:text><XmlElement elementName="action"><xsl:text>
</xsl:text><XmlElement elementName="name"><xsl:text>
</xsl:text><String value="Set"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of name</xsl:comment><xsl:text>
</xsl:text><XmlElement elementName="params"><xsl:text>
</xsl:text><Number value="{@id}" size="32" mutable="true"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of params</xsl:comment><xsl:text>
</xsl:text></XmlElement><xsl:comment>action</xsl:comment><xsl:text>
</xsl:text></Block><xsl:text>
</xsl:text>[More Event-specific XSL/XML...]<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="record">
[Record-specific XSL/XML...]<xsl:text>
</xsl:text><Block name="{@name}" mutable="true"><xsl:text>
</xsl:text><XmlElement elementName="action"><xsl:text>
</xsl:text><XmlElement elementName="name"><xsl:text>
</xsl:text><String value="Set"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of name</xsl:comment><xsl:text>
</xsl:text><XmlElement elementName="params"><xsl:text>
</xsl:text><Number value="{@id}" size="32" mutable="true"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of params</xsl:comment><xsl:text>
</xsl:text></XmlElement><xsl:comment>action</xsl:comment><xsl:text>
</xsl:text></Block><xsl:text>
</xsl:text>[More Record-specific XSL/XML...]<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
您可以创建新模板
<xsl:template name="theCommonPart">
<Block name="{@name}" mutable="true"><xsl:text>
</xsl:text><XmlElement elementName="action"><xsl:text>
</xsl:text><XmlElement elementName="name"><xsl:text>
</xsl:text><String value="Set"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of name</xsl:comment><xsl:text>
</xsl:text><XmlElement elementName="params"><xsl:text>
</xsl:text><Number value="{@id}" size="32" mutable="true"/><xsl:text>
</xsl:text></XmlElement><xsl:comment>End of params</xsl:comment><xsl:text>
</xsl:text></XmlElement><xsl:comment>action</xsl:comment><xsl:text>
</xsl:text></Block><xsl:text>
</xsl:text>
</xsl:template>
并通过将此块替换为
从现有模板中调用它<xsl:call-template name="theCommonPart"/>