如何在 XSL XML 文件中引用重复的文本块



在下面的示例 XSL 转换文件中,"记录"和"事件"模板几乎相同。它们在模板的顶部和底部有一些不同的文本,但中间有重复的文本,两者是相同的。

有没有办法可以将相同的文本放在另一个文件中或(理想情况下)放在同一文件的另一个块中,然后在"记录"和"事件"模板中添加单行重新围栏/包含以引用该代码?

这样,我可以有一个只写一次但被多次引用的代码块。下面是一个简化的示例。在我的实际工作中,重复的代码块要大得多,并且重复了很多次。

谢谢。

<?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"/>

最新更新