合并两个xml文件

时间:2016-06-16 09:30:11

标签: xslt

我想将两个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> 

提前致谢

2 个答案:

答案 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中:将每个转换的所有规则放入单独的模式,捕获变量中每个阶段的结果,然后应用模板到指定下一阶段的模式名称的变量。

如果您想以其他方式组合样式表,那么您需要更好地解释需求。