xsl-list
[Top] [All Lists]

RE: Transforming and sorting nodes into the same format from differen t parts of the XML document

2005-02-02 12:25:05
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(_dot_)keegan(_at_)moneymate(_dot_)com] 
Sent: 02 February 2005 19:14
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'; 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(_at_)seb(_dot_)se</DETAIL>

<DETAIL detailFieldId="6" detailFieldName="Kontakt"/>

<DETAIL detailFieldId="7" detailFieldName="För">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(_at_)seb(_dot_)se</DETAIL>
<DETAIL id="6" Name="Kontakt"/>
<DETAIL id="7" Name="För">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(_at_)seb(_dot_)se</DETAIL>
<DETAIL id="6" Name="Kontakt"/>
<DETAIL id="7" Name="För">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
**********************************************************************


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>