如何在现有XML中添加XML元素并移动其中的元素

时间:2016-08-17 09:36:22

标签: xml xslt

我正在尝试使用XSLT添加XML元素。添加元素后,我想在新添加的元素中移动一些元素。

这是我的XML

    <Collection>
<ONE/>
<TWO/>
<THREE/>

    <Allparts>

        <part>
            <number>001</number>
            <material>Platinum</material>
            <price>High</price>
        </part>

        <part>
            <number>002</number>
            <material>Gold</material>
            <price>Medium</price>
        </part>

        <part>
            <number>003</number>
            <material>Silver</material>
            <price>Low</price>
        </part>


    </Allparts>

    <Allboms>

        <bom>
            <Part-number>001</Part-number>
        </bom>

        <bom>
            <Part-number>002</Part-number>
        </bom>

        <bom>
            <Part-number>003</Part-number>
        </bom>
    </Allboms>

    </Collection>

我想要输出

     <Collection>
<ONE/>
<TWO/>
<THREE/>

        <PARTCollection>
        <Allparts>

            <part>
                <number>001</number>
                <material>Platinum</material>
                <price>High</price>
            </part>

            <part>
                <number>002</number>
                <material>Gold</material>
                <price>Medium</price>
            </part>

            <part>
                <number>003</number>
                <material>Silver</material>
                <price>Low</price>
            </part>


        </Allparts>
    </PARTCollection>
        <BOMCollection>
        <Allboms>

            <bom>
                <Part-number>001</Part-number>
            </bom>

            <bom>
                <Part-number>002</Part-number>
            </bom>

            <bom>
                <Part-number>003</Part-number>
            </bom>
        </Allboms>
    <BOMCollection>

        </Collection>

为此我写了

<!-- identity transform -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Collection">
        <xsl:copy>
        <BOMCollection></BOMCollection>
        <PARTCollection></PARTCollection>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="BOMCollection">
        <xsl:copy>
            <xsl:apply-templates select="../Allboms"
                mode="move" />
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="PARTCollection">
        <xsl:copy>
        <xsl:apply-templates select="../Allparts"
                mode="move" />
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>



        <xsl:template match="Allboms" mode="move">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Allparts" mode="move">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

新元素正在正确创建,但数据没有在其中移动它可以告诉我如何执行此任务

1 个答案:

答案 0 :(得分:0)

使用

就足够了
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Collection">
        <xsl:copy>
            <PARTCollection>
                <xsl:apply-templates select="Allparts"/>
            </PARTCollection>
            <BOMCollection>
                <xsl:apply-templates select="Allboms"/>
            </BOMCollection>
        </xsl:copy>
    </xsl:template>

</xsl:transform>