我想将两个xsl文件合并为一个。我试过但我没有这样做。这两个xsl文件都可以单独工作,但是当我将它们组合起来时,却没有。我不是xsl的专家。
这是第一个xsl文件:
<xsl:variable name="products" select="document('T01_product.xml')/products"/>
<xsl:strip-space elements="*"/>
<xsl:key name="product" match="product" use="pm-id" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="deleted-assignment/pm-id">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('product', .)/art-num"/>
</xsl:template>
</xsl:stylesheet>
第二个xsl文件是
<xsl:variable name="items" select="document('T01_item.xml')/items"/>
<xsl:strip-space elements="*"/>
<xsl:key name="item" match="item" use="pm-id" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="deleted-assignment/pm-id">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('item', .)/art-num"/>
</xsl:template>
</xsl:stylesheet>
提前致谢
答案 0 :(得分:0)
你还没有解释你的输入看起来如何以及你想要的结果,所以这是一个疯狂的猜测,也许你想要结合
<xsl:template match="deleted-assignment/pm-id">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('product', .)/art-num"/>
</xsl:template>
和
<xsl:template match="deleted-assignment/pm-id">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('item', .)/art-num"/>
</xsl:template>
到
<xsl:template match="deleted-assignment/pm-id">
<xsl:copy-of select="."/>
<xsl:copy-of select="key('product', .)/art-num"/>
<xsl:copy-of select="key('item', .)/art-num"/>
</xsl:template>
答案 1 :(得分:0)
当您说要组合两个样式表A和B时,您是指首先要应用转换A,然后将转换B应用于结果吗?如果这是你想要的,那么最好将它们分开,并使用一些流水线技术来组织工作流程(例如XProc,但还有许多其他候选者)。
也可以使用模式执行单样式表管道,特别是在XSLT 2.0中:将每个转换的所有规则放入单独的模式,捕获变量中每个阶段的结果,然后应用模板到指定下一阶段的模式名称的变量。
如果您想以其他方式组合样式表,那么您需要更好地解释需求。