如何在 XSL XML 文件中引用重复的文本块?
How can I reference a repeated block of text in an XSL XML file?
在下面的示例 XSL 转换文件中,"record" 和 "event" 模板几乎相同。它们在模板的顶部和底部有一些不同的文本,但中间有重复的文本,这两个文本是相同的。
有没有一种方法可以将相同的文本放入另一个文件或(理想情况下)放入同一个文件的另一个块中,然后将单行 refence/include 添加到 "record"和 "event" 模板来引用该代码?
这样,我就可以拥有只编写一次但被多次引用的代码块。下面是一个简化的例子。在我的实际工作中,重复的代码块要大得多,重复的次数也多
谢谢。
<?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>
您可以创建一个新模板
<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"/>
在下面的示例 XSL 转换文件中,"record" 和 "event" 模板几乎相同。它们在模板的顶部和底部有一些不同的文本,但中间有重复的文本,这两个文本是相同的。
有没有一种方法可以将相同的文本放入另一个文件或(理想情况下)放入同一个文件的另一个块中,然后将单行 refence/include 添加到 "record"和 "event" 模板来引用该代码?
这样,我就可以拥有只编写一次但被多次引用的代码块。下面是一个简化的例子。在我的实际工作中,重复的代码块要大得多,重复的次数也多
谢谢。
<?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>
您可以创建一个新模板
<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"/>