我正在尝试使用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>
新元素正在正确创建,但数据没有在其中移动它可以告诉我如何执行此任务
答案 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>