我需要将此节点合并到一起, 但是它必须和具有属性 method=" a"
的母节点合并到一起 。
输入 :
<myroot>
<elem name="a" creationDate="">
<list id="xxx" ver="uu">
<nodeA id="a">
<fruit id="small">
<orange id="x" method="create">
<color>Orange</color>
</orange>
</fruit>
<fruit id="small" method="a">
<kiwi id="y" method="create">
<color>Red</color>
<type>sour</type>
</kiwi>
</fruit>
<fruit id="large" method="a">
<melon id="y" method="create">
<attributes>
<color>Green</color>
<type>sweet</type>
</attributes>
</melon>
</fruit>
</nodeA>
</list>
</elem>
</myroot>
我的 XSL 文件 :
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* , node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="list">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each-group select="/*/*/*/*" group-by="@id">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each-group select="current-group()/*" group-by="concat(local-name(), | , @id)">
<xsl:copy>
<xsl:apply-templates select="@*, *, (current-group() except .)/*"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强 > 我的输出: 强>
<myroot>
<elem name="a" creationDate="">
<list id="xxx" ver="uu">
<nodeA id="a">
<fruit id="small">
<orange id="x" method="create">
<color>Orange</color>
</orange>
<kiwi id="y" method="create">
<color>Red</color>
<type>sour</type>
</kiwi>
</fruit>
<fruit id="large" method="a">
<melon id="y" method="create">
<attributes>
<color>Green</color>
<type>sweet</type>
</attributes>
</melon>
</fruit>
</nodeA>
</list>
</elem>
</myroot>
<强 > 预期输出: 强>
<myroot>
<elem name="a" creationDate="">
<list id="xxx" ver="uu">
<nodeA id="a">
<fruit id="small" method="a"> <!-- this is the correct merge where the merged is in parent that has a method -->
<kiwi id="y" method="create">
<color>Red</color>
<type>sour</type>
</kiwi>
<orange id="x" method="create">
<color>Orange</color>
</orange>
</fruit>
<fruit id="large" method="a">
<melon id="y" method="create">
<attributes>
<color>Green</color>
<type>sweet</type>
</attributes>
</melon>
</fruit>
</nodeA>
</list>
</elem>
</myroot>
我们可以看到我的变换只将它组合在一起而不考虑方法。 如何修改它, 以便将其合并到有 ethod=" a" code> 的母体, 示例是
Thank you. John