xslt - how to sort elements and group them based on unique element or ID, which has namespace -
i have asked same question not namespace
i have xml like..this
<?xml version = '1.0' encoding = 'utf-8'?> <finaldbgetuserid> <finaldbgetuseridoutputcollection xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/finaldbgetuserid" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/finaldbgetuserid"> <ns0:userubscribers> <ns0:user_id>237</ns0:user_id> <ns0:businessentity> <ns0:nevada_business_id>nv0511201114</ns0:nevada_business_id> <ns0:business_entity_id>207</ns0:business_entity_id> </ns0:businessentity> </ns0:userubscribers> <ns0:userubscribers> <ns0:user_id>237</ns0:user_id> <ns0:businessentity> <ns0:nevada_business_id>nv0511201119</ns0:nevada_business_id> <ns0:business_entity_id>212</ns0:business_entity_id> </ns0:businessentity> </ns0:userubscribers> <ns0:userubscribers> <ns0:user_id>237</ns0:user_id> <ns0:businessentity> <ns0:nevada_business_id>nv0511201129</ns0:nevada_business_id> <ns0:business_entity_id>230</ns0:business_entity_id> </ns0:businessentity> </ns0:userubscribers> </finaldbgetuseridoutputcollection> </finaldbgetuserid>
output should like
<finaldbgetuserid> <finaldbgetuseridoutputcollection xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/finaldbgetuserid" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/finaldbgetuserid"> <ns0:userubscribers> <ns0:user_id>237</ns0:user_id> <ns0:businessentity> <ns0:nevada_business_id>nv0511201114</ns0:nevada_business_id> <ns0:business_entity_id>207</ns0:business_entity_id> </ns0:businessentity> <ns0:businessentity> <ns0:nevada_business_id>nv0511201119</ns0:nevada_business_id> <ns0:business_entity_id>212</ns0:business_entity_id> </ns0:businessentity> <ns0:businessentity> <ns0:nevada_business_id>nv0511201129</ns0:nevada_business_id> <ns0:business_entity_id>230</ns0:business_entity_id> </ns0:businessentity> </ns0:userubscribers> </finaldbgetuseridoutputcollection> </finaldbgetuserid>
following below xslt, trying , not getting desired result
<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:key name="kuserid" match="userubscribers" use="user_id"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"> <xsl:sort select="user_id" data-type="number"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match= "userubscribers|user_id |businessentity"/> <xsl:template match= "userubscribers [generate-id() = generate-id(key('kuserid', user_id)[1]) ]"> <userubscribers> <xsl:copy-of select="user_id"/> <xsl:apply-templates mode="copy" select="key('kuserid',user_id)" /> </userubscribers> </xsl:template> <xsl:template match="userubscribers" mode="copy"> <businessentity> <xsl:apply-templates/> </businessentity> </xsl:template> </xsl:stylesheet>
i getting output same input , there no change. may doing mistake, not getting mistake .... trying find out
define xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/db/finaldbgetuserid"
on xsl:stylesheet
element, use prefix ns0
anywhere in stylesheet match or select elements namespace e.g. <xsl:key name="kuserid" match="ns0:userubscribers" use="ns0:user_id"/>
, <xsl:sort select="ns0:user_id" data-type="number"/>
.
Comments
Post a Comment