XSL重用?是!但是:元素不能包含xsl:import元素! :-(

时间:2010-04-23 21:14:49

标签: xslt import code-reuse

我正在使用带有大量重复转换的繁重样式表,因此我认为重用相同的代码块是明智的,因此我不需要在一堆不同的地方进行相同的更改。所以我发现了,但是-alas-它不允许我这样做。当尝试在Sonic Workbench中运行它时,我收到以下错误:

  

xsl:for-each元素不得包含xsl:import元素

这是我的样式表代码:

<xsl:template match="/">
  <InboundFargoMessage>
   <EdiSender>
    <xsl:value-of select="TransportInformationMessage/SenderId"/>
   </EdiSender>
   <EdiReceiver>
    <xsl:value-of select="TransportInformationMessage/RecipientId"/>
   </EdiReceiver>
      <EdiSource>PORLOGIS</EdiSource>
      <EdiDestination>FARGO</EdiDestination>
   <Transportations>
    <xsl:for-each select="TransportInformationMessage/TransportUnits/TransportUnit">
     <xsl:import href="TransportCDMtoFDM_V0.6.xsl"/>
    </xsl:for-each>
    <xsl:for-each select="TransportInformationMessage/Waybill/TransportUnits/TransportUnit">
     <xsl:import href="TransportCDMtoFDM_V0.6.xsl"/>
    </xsl:for-each>
   </Transportations>
  </InboundFargoMessage>
 </xsl:template>
</xsl:stylesheet>

我现在将遗漏孩子的xsl-sheets,因为问题似乎发生在基地。

如果我不能使用xsl:import,是否有重用选项?

3 个答案:

答案 0 :(得分:3)

  

如果我不能使用xsl:import,那就有   任何重用选项?

可以使用<xsl:import>

所有<xsl:import>元素必须是<xsl:stylesheet> 的第一个元素

作为替代方案,<xsl:include>元素必须全局定义(<xsl:stylesheet>的子元素),但可以在任何其他可以全局放置的xslt指令之前。

您需要了解并理解使用这两条XSLT指令的规则。我建议你阅读一本关于XSLT的好书。

XSLT中可重用性的主要单位是模板<xsl:template>)。

导入样式表可以使用(通过<xsl:call-template><xsl:apply-templates>)任何导入的样式表中定义的任何模板。

答案 1 :(得分:0)

每个包含的XSL文件都应包含模板。

主文件在开头包含其他文件,然后从各个地方使用call-templateapply-templates调用模板。

答案 2 :(得分:0)