我正在使用带有大量重复转换的繁重样式表,因此我认为重用相同的代码块是明智的,因此我不需要在一堆不同的地方进行相同的更改。所以我发现了,但是-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,是否有重用选项?
答案 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-template
或apply-templates
调用模板。
答案 2 :(得分:0)