XSLT 1.0 Group nodes by child attribute value -
i'm trying group child elements, within parent element only, own parent grouping.
group action/@publishforresources within own parent element actions.
so if have xml such below
<?xml version="1.0" encoding="utf-8"?> <scheduleupdates id_schedule="10" timestamp="2013-07-31t09:28:15.285+10:00" id_user="2" userid="2" username="admin" caused-by="" cookiepgs="" crbstransactionid="2298"> <actions operation="insert"> <action id_action="207836" actionkindid="3" id_task="4094" publishforresources="855"/> <action id_action="207824" actionkindid="3" id_task="4101" publishforresources="876"/> <action id_action="207828" actionkindid="3" id_task="4098" publishforresources="876"/> <action id_action="207817" actionkindid="3" id_task="4097" publishforresources="876"/> <action id_action="207840" actionkindid="3" id_task="4095" publishforresources="855"/> </actions> <actions operation="update"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="810"/> <action id_action="207824" actionkindid="3" id_task="3101" publishforresources="872"/> <action id_action="207828" actionkindid="3" id_task="3098" publishforresources="872"/> <action id_action="207817" actionkindid="3" id_task="3097" publishforresources="872"/> <action id_action="207840" actionkindid="3" id_task="3095" publishforresources="810"/> </actions> <actions operation="delete"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="73"/> <action id_action="207824" actionkindid="3" id_task="2101" publishforresources="55"/> <action id_action="207828" actionkindid="3" id_task="2098" publishforresources="55"/> <action id_action="207817" actionkindid="3" id_task="2097" publishforresources="73"/> <action id_action="207840" actionkindid="3" id_task="2095" publishforresources="73"/> </actions> </scheduleupdates>
the result should be
<?xml version="1.0" encoding="utf-8"?> <scheduleupdates id_schedule="10" timestamp="2013-07-31t09:28:15.285+10:00" id_user="2" userid="2" username="admin" caused-by="" cookiepgs="" crbstransactionid="2298"> <actions operation="insert" publishforresources="876"> <action id_action="207824" actionkindid="3" id_task="4101" publishforresources="876"/> <action id_action="207828" actionkindid="3" id_task="4098" publishforresources="876"/> <action id_action="207817" actionkindid="3" id_task="4097" publishforresources="876"/> </actions> <actions operation="insert" publishforresources="855"> <action id_action="207836" actionkindid="3" id_task="4094" publishforresources="855"/> <action id_action="207840" actionkindid="3" id_task="4095" publishforresources="855"/> </actions> <actions operation="update" publishforresources="810"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="810"/> <action id_action="207840" actionkindid="3" id_task="3095" publishforresources="810"/> </actions> <actions operation="update" publishforresources="872"> <action id_action="207824" actionkindid="3" id_task="3101" publishforresources="872"/> <action id_action="207828" actionkindid="3" id_task="3098" publishforresources="872"/> <action id_action="207817" actionkindid="3" id_task="3097" publishforresources="872"/> </actions> <actions operation="delete" publishforresources="73"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="73"/> <action id_action="207817" actionkindid="3" id_task="2097" publishforresources="73"/> <action id_action="207840" actionkindid="3" id_task="2095" publishforresources="73"/> </actions> <actions operation="delete" publishforresources="55"> <action id_action="207824" actionkindid="3" id_task="2101" publishforresources="55"/> <action id_action="207828" actionkindid="3" id_task="2098" publishforresources="55"/> </actions> </scheduleupdates>
i've been beating head around xslt 1.0 grouping/xsl:key solutions, cannot seem work.
appreciate , guidance.
thanks help
david
how's this:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <xsl:key name="kpubfor" match="action" use="concat(../@operation, '+', @publishforresources)" /> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="actions"> <xsl:apply-templates select="action[generate-id() = generate-id(key('kpubfor', concat(../@operation, '+', @publishforresources))[1])]" mode="group" /> </xsl:template> <xsl:template match="action" mode="group"> <actions> <xsl:apply-templates select="../@*" /> <xsl:attribute name="publishforresources"> <xsl:value-of select="@publishforresources" /> </xsl:attribute> <xsl:apply-templates select="key('kpubfor', concat(../@operation, '+', @publishforresources))" /> </actions> </xsl:template> </xsl:stylesheet>
when run on sample input, result is:
<scheduleupdates id_schedule="10" timestamp="2013-07-31t09:28:15.285+10:00" id_user="2" userid="2" username="admin" caused-by="" cookiepgs="" crbstransactionid="2298"> <actions operation="insert" publishforresources="855"> <action id_action="207836" actionkindid="3" id_task="4094" publishforresources="855" /> <action id_action="207840" actionkindid="3" id_task="4095" publishforresources="855" /> </actions> <actions operation="insert" publishforresources="876"> <action id_action="207824" actionkindid="3" id_task="4101" publishforresources="876" /> <action id_action="207828" actionkindid="3" id_task="4098" publishforresources="876" /> <action id_action="207817" actionkindid="3" id_task="4097" publishforresources="876" /> </actions> <actions operation="update" publishforresources="810"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="810" /> <action id_action="207840" actionkindid="3" id_task="3095" publishforresources="810" /> </actions> <actions operation="update" publishforresources="872"> <action id_action="207824" actionkindid="3" id_task="3101" publishforresources="872" /> <action id_action="207828" actionkindid="3" id_task="3098" publishforresources="872" /> <action id_action="207817" actionkindid="3" id_task="3097" publishforresources="872" /> </actions> <actions operation="delete" publishforresources="73"> <action id_action="207836" actionkindid="3" id_task="2094" publishforresources="73" /> <action id_action="207817" actionkindid="3" id_task="2097" publishforresources="73" /> <action id_action="207840" actionkindid="3" id_task="2095" publishforresources="73" /> </actions> <actions operation="delete" publishforresources="55"> <action id_action="207824" actionkindid="3" id_task="2101" publishforresources="55" /> <action id_action="207828" actionkindid="3" id_task="2098" publishforresources="55" /> </actions> </scheduleupdates>
Comments
Post a Comment