如何在 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"/>