Subject: RE: [xsl] Transforming and sorting nodes into the same format from differen t parts of the XML document From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 2 Feb 2005 19:25:05 -0000 |
This looks like a classic 2-phase transformation. First convert the FUND_CODE elements to DETAIL elements, then sort all the elements. <xsl:variable name="x"> <xsl:apply-templates select="/" mode="phase1"/> <!-- phase 1 converts FUND_CODE to DETAIL and adds id attributes --> </xsl:variable> <xsl:template match="/"> <out> <xsl:apply-templates select="$x/*" mode="phase2"> <xsl:sort select="@id"/> </xsl:apply-templates> </out> </xsl:template> (In XSLT 1.0 you need select="xx:node-set($x)/*", unfortunately). Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Thomas Keegan [mailto:thomas.keegan@xxxxxxxxxxxxx] > Sent: 02 February 2005 19:14 > To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'; Thomas Keegan > Subject: [xsl] Transforming and sorting nodes into the same > format from differen t parts of the XML document > > (DOC 1) I have a XML Document like so... > > <FUND> > <FUND_CODES> > <FUND_CODE fundCodeType="MEXID" fundCode=""/> > <FUND_CODE fundCodeType="ISIN" fundCode="SE0001039561"/> > > <FUND_CODE fundCodeType="COB" fundCode=""/> > > <FUND_CODE fundCodeType="WKN" fundCode=""/> > > <FUND_CODE fundCodeType="CNMV" fundCode=""/> > > <FUND_CODE fundCodeType="SIX" fundCode="910536"/> > > <FUND_CODE fundCodeType="CITYGATE" fundCode="636481"/> > > </FUND_CODES> > <DETAILS> > <DETAIL detailFieldId="1" detailFieldName="Adress">SEB Fonder > AB</DETAIL> > > <DETAIL detailFieldId="2" detailFieldName="Telefon">771 36 63 > 37</DETAIL> > > <DETAIL detailFieldId="3" detailFieldName="telefonnummer">36 > 63 37</DETAIL> > > <DETAIL detailFieldId="4" detailFieldName="Fax"/> > > <DETAIL detailFieldId="5" detailFieldName="E-post">der@xxxxxx</DETAIL> > > <DETAIL detailFieldId="6" detailFieldName="Kontakt"/> > > <DETAIL detailFieldId="7" detailFieldName="Fvr">dinaviska</DETAIL> > > <DETAIL detailFieldId="8" detailFieldName="Sparplan"/> > > <DETAIL detailFieldId ="374" detailFieldName ="No 4 %">8%</DETAIL> > > <DETAIL detailFieldId ="375" detailFieldName ="No 5 %">6%</DETAIL> > > <DETAIL detailFieldId ="376" detailFieldName ="No 6 %">5%</DETAIL> > > <DETAIL detailFieldId ="377" detailFieldName ="No 7 %">5%</DETAIL> > > <DETAIL detailFieldId ="378" detailFieldName ="No 8 %">5%</DETAIL> > > <DETAIL detailFieldId ="379" detailFieldName ="No 9 %"/> > > <DETAIL detailFieldId ="380" detailFieldName ="No 10 %"/> > > <DETAIL detailFieldId ="384" detailFieldName > ="Datum">2004-09-30</DETAIL> > > </DETAILS> > </FUND> > > > (DOC 2) I want it outputted like this...as u can see the > attribute id is > sorted > > <FUND> > <DETAIL id="1" Name="Adress">SEB Fonder AB</DETAIL> > <DETAIL id="2" Name="Telefon">771 36 63 37</DETAIL> > <DETAIL id="3" Name="telefonnummer">36 63 37</DETAIL> > <DETAIL id="4" Name="Fax"/> > <DETAIL id="5" Name="E-post">der@xxxxxx</DETAIL> > <DETAIL id="6" Name="Kontakt"/> > <DETAIL id="7" Name="Fvr">dinaviska</DETAIL> > <DETAIL id="8" Name="Sparplan"/> > <DETAIL id="70" Name="MEXID"/> > <DETAIL id="87" Name="SEDOL"/> > <DETAIL id="88" Name="ISIN">SE0001039561</DETAIL> > <DETAIL id="89" Name="COB"/> > <DETAIL id="90" Name="WKN"/> > <DETAIL id="91" Name="CMNV"/> > <DETAIL id="93" Name="SIX">910536</DETAIL> > <DETAIL id="94" Name="CITYGATE">636481</DETAIL> > <DETAIL id ="374" Name ="No 4 %">8%</DETAIL> > <DETAIL id ="375" Name ="No 5 %">6%</DETAIL> > <DETAIL id ="376" Name ="No 6 %">5%</DETAIL> > <DETAIL id ="377" Name ="No 7 %">5%</DETAIL> > <DETAIL id ="378" Name ="No 8 %">5%</DETAIL> > <DETAIL id ="379" Name ="No 9 %"/> > <DETAIL id ="380" Name ="No 10 %"/> > <DETAIL id ="384" Name ="Datum ">2004-09-30</DETAIL> > </FUND> > > > id 70, 87, 88, 89, 90, 91, 93, 94 are hard coded > > So this... > <FUND_CODE fundCodeType="MEXID" fundCode=""/> > > <FUND_CODE fundCodeType="ISIN" fundCode="SE0001039561"/> > > <FUND_CODE fundCodeType="COB" fundCode=""/> > > <FUND_CODE fundCodeType="WKN" fundCode=""/> > > <FUND_CODE fundCodeType="CNMV" fundCode=""/> > > <FUND_CODE fundCodeType="SIX" fundCode="910536"/> > > <FUND_CODE fundCodeType="CITYGATE" fundCode="636481"/> > > goes to this.... > <DETAIL id="70" Name="MEXID"/> > <DETAIL id="87" Name="SEDOL"/> > <DETAIL id="88" Name="ISIN">SE0001039561</DETAIL> > <DETAIL id="89" Name="COB"/> > <DETAIL id="90" Name="WKN"/> > <DETAIL id="91" Name="CMNV"/> > <DETAIL id="93" Name="SIX">910536</DETAIL> > <DETAIL id="94" Name="CITYGATE">636481</DETAIL> > > > > MY STYLE SHEET... > > <xsl:element name="DETAILS"> > > <xsl:for-each select="DETAILS/DETAIL"> > > <xsl:element name="DETAIL"> > <xsl:attribute name="id"> > <xsl:value-of select="@detailFieldId"/> > </xsl:attribute> > > <xsl:attribute name="Name"> > <xsl:value-of select="@detailFieldName"/> > </xsl:attribute> > > <xsl:if test=". != ''"> > <xsl:value-of select="."/> > </xsl:if> > > </xsl:element> > > </xsl:for-each> > > </xsl:element> > > Now this part of my style sheet (above) converts > > <DETAIL detailFieldId="1" detailFieldName="Adress">SEB Fonder > AB</DETAIL> > > in to this... > > <DETAIL id="1" Name="Adress">SEB Fonder AB</DETAIL> > > > Converting this... > <FUND_CODE fundCodeType="MEXID" fundCode=""/> > in to this > <DETAIL detailFieldId="1" detailFieldName="Adress">SEB Fonder > AB</DETAIL> > > or this > <DETAIL id="1" Name="Adress">SEB Fonder AB</DETAIL> > > > is simple and I know how to get my output document to output > like so... > > <FUND> > <DETAIL id="1" Name="Adress">SEB Fonder AB</DETAIL> > <DETAIL id="2" Name="Telefon">771 36 63 37</DETAIL> > <DETAIL id="3" Name="telefonnummer">36 63 37</DETAIL> > <DETAIL id="4" Name="Fax"/> > <DETAIL id="5" Name="E-post">der@xxxxxx</DETAIL> > <DETAIL id="6" Name="Kontakt"/> > <DETAIL id="7" Name="Fvr">dinaviska</DETAIL> > <DETAIL id="8" Name="Sparplan"/> > <DETAIL id ="374" Name ="No 4 %">8%</DETAIL> > <DETAIL id ="375" Name ="No 5 %">6%</DETAIL> > <DETAIL id ="376" Name ="No 6 %">5%</DETAIL> > <DETAIL id ="377" Name ="No 7 %">5%</DETAIL> > <DETAIL id ="378" Name ="No 8 %">5%</DETAIL> > <DETAIL id ="379" Name ="No 9 %"/> > <DETAIL id ="380" Name ="No 10 %"/> > <DETAIL id ="384" Name ="Datum ">2004-09-30</DETAIL> > <DETAIL id="70" Name="MEXID"/> > <DETAIL id="87" Name="SEDOL"/> > <DETAIL id="88" Name="ISIN">SE0001039561</DETAIL> > <DETAIL id="89" Name="COB"/> > <DETAIL id="90" Name="WKN"/> > <DETAIL id="91" Name="CMNV"/> > <DETAIL id="93" Name="SIX">910536</DETAIL> > <DETAIL id="94" Name="CITYGATE">636481</DETAIL> > </FUND> > > but how do I get it to be sorted at the same time???? > > > Any help or even pointing me in the right direction would be great! > > If you need any clarification on any part just ask. > > Cheer, > > Thomas Keegan > > > > ********************************************************************** > For more information on MoneyMate please visit our web site > at http://www.moneymate.com > > This email and any files transmitted with it are confidential and > intended solely for the use of the individual or entity to whom they > are addressed. If you have received this email in error please notify > the system manager. > > This footnote also confirms that this email message has been swept by > MIMEsweeper for the presence of computer viruses. > > www.mimesweeper.com > **********************************************************************
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Transforming and sorting node, Thomas Keegan | Thread | Re: [xsl] Using variables in extens, Roger I Martin PhD |
[xsl] Transforming and sorting node, Thomas Keegan | Date | Re: [xsl] XSLT for Extensibility, Alan |
Month |