Splitting XML using XSLT based on same child Nodes and retain Header part with additional information -
requirement: split body of xml same nodes , in header tag retain original tags , append unique id child nodes of body part of xml.
e.g:
<document> <header> <time>2011-04-22t10:57:00.000-04:00</time> </header> <child> <submit> <application> ... </application> </submit> <issuingagency> ... <agentidentification> <identificationid>103701978</identificationid> </agentidentification> <agentsequenceid>01</agentsequenceid> <agentsatus> <statustext>abc</statustext> <statusdescriptiontext>initial</statusdescriptiontext> </agentsatus> ... ... ... </issuingagency> </child> <child> <submit> <application> ... </application> </submit> <issuingagency> <agentidentification> <identificationid>103701978</identificationid> </agentidentification> <agentsequenceid>01</agentsequenceid> <agentsatus> <statustext>r</statustext> <statusdescriptiontext>renewal</statusdescriptiontext> </agentsatus> ... ... ... </issuingagency> </child> <child> <submit> <application> ... </application> </submit> <issuingagency> ... <agentidentification> <identificationid>103701978</identificationid> </agentidentification> <agentsequenceid>01</agentsequenceid> <agentsatus> <statustext>r</statustext> <statusdescriptiontext>renewal</statusdescriptiontext> </agentsatus> ... ... ... </issuingagency> </child></document>
now need output as: output1.xml
<document> <header> <time>2011-04-22t10:57:00.000-04:00</time> <uniqueid>103701978-01-abc</uniqueid> </header> <child> ... ... information should not removed, have retained ... <issuingagency> <agentidentification> <identificationid>103701978</identificationid> </agentidentification> <agentsequenceid>01</agentsequenceid> <agentsatus> <statustext>abc</statustext> <statusdescriptiontext>initial</statusdescriptiontext> </agentsatus> </issuingagency> ... ...all information should not removed, have retained ... </child></document>
now here if observed header portion being appended uinque id combination of child/issuingagency/agentidentification/identificationid - child/issuingagency/agentsequenceid - child/issuingagency/agentsatus/statustext
likewise need 3 different xml files. number of generated files dynamic in nature there can 10 childs output may 10 different files header information being added unique id.
i tried generating different files xslt problem unable add header information along them, need guys have fixed. appreciate if addressed quickly. have been trying past 1 week no luck :(
assuming xslt 2.0, following uses xsl:result-document
, tunnel parameter:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xs="http://www.w3.org/2001/xmlschema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/"> <xsl:apply-templates select="document/child" mode="new-doc"/> </xsl:template> <xsl:template match="child" mode="new-doc"> <xsl:result-document href="output{position()}.xml"> <xsl:apply-templates select="ancestor::*"> <xsl:with-param name="current-child" select="current()" tunnel="yes"/> </xsl:apply-templates> </xsl:result-document> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="child"> <xsl:param name="current-child" tunnel="yes"/> <xsl:if test=". $current-child"> <xsl:copy-of select="."/> </xsl:if> </xsl:template> </xsl:stylesheet>
Comments
Post a Comment