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

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

c++ - End of file on pipe magic during open -