このノードを一緒にマージする必要がありますが、属性を持つ親とマージする必要があります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>
ご覧のとおり、私の変換はそれを組み合わせるだけで、方法は考慮していません。method="a"
例にある親にマージされるように変更する方法<fruit id="small" method="a">
ありがとうございました。ジョン