我有一个xml文件,我需要通过创建一个空的父节点,将具有交易项ID(如 childA )的特定子节点移动/复制到父节点 .
喜欢 Input XML :
<root>
<Payload>
<TradeItemVersion>
<TradeItemID>A</TradeItemID>
<TradeItemTitle>B</TradeItemTitle>
<ProductID>C</ProductID>
<TradeItemVersion>
<Child>
<TradeItemID>ChildA</TradeItemID>
<TradeItemTitle>Child</TradeItemTitle>
<ProductID>Child</ProductID>
<Child>
<Child>
<TradeItemID>ChildB</TradeItemID>
<TradeItemTitle>Child</TradeItemTitle>
<ProductID>Child</ProductID>
<Child>
<Payload>
<root>
Final Output :
<root>
<Payload>
<TradeItemVersion>
<TradeItemID>ChildA</TradeItemID>
<TradeItemTitle>Child</TradeItemTitle>
<ProductID>Child</ProductID>
<TradeItemVersion>
<TradeItemVersion>
<TradeItemID>A</TradeItemID>
<TradeItemTitle>B</TradeItemTitle>
<ProductID>C</ProductID>
<TradeItemVersion>
<Child>
<TradeItemID>ChildB</TradeItemID>
<TradeItemTitle>Child</TradeItemTitle>
<ProductID>Child</ProductID>
<Child>
<Payload>
<root>
我能够在顶部复制孩子,但所有 childs 都被复制,我无法选择特定的孩子,而且我无法创建新的空父标记以将孩子放入其中 .
我的代码如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="TradeItemVersion">
<xsl:apply-templates mode="search"/>
<xsl:call-template name="identity"/>
</xsl:template>
<xsl:template match="Child"/>
<xsl:template match="Child" mode="search">
<xsl:call-template name="identity"/>
</xsl:template>
<xsl:template match="text()" mode="search"/>
</xsl:stylesheet>
请建议 .
1 回答
经过大量的打击和试验后,我自己找到了答案 .
以下XSL会转换:
输入XML:
输出XML: