[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] understanding key usage


Subject: Re: [xsl] understanding key usage
From: Osman Çınar Eren <Cinar.Eren@xxxxxxxxxxxxx>
Date: Mon, 22 Nov 2004 16:58:09 +0200

hi,
all of the details in my project are below.

my XSL is the following:

<?xml version="1.0" encoding="ISO-8859-9"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:key name="categorise" match="value" use="usthesapkodu"/>
<xsl:key name="dkey" match="dovizler" use="key"/>
<xsl:output method="xml" encoding="ISO-8859-9"/>

  <xsl:template match="Vaziyet">

    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

      <fo:layout-master-set>

        <fo:simple-page-master master-name="A4"
           page-width="300mm"  page-height="210mm"
           margin-top="0.5in"  margin-bottom="0.5in"
           margin-left="0.1in" margin-right="0.1in">
          <fo:region-body/>
         </fo:simple-page-master>

      </fo:layout-master-set>

      <fo:page-sequence master-reference="A4">

        <fo:flow flow-name="xsl-region-body">
          <fo:table>
	    <fo:table-column column-width="15mm"/>
           <fo:table-column column-width="45mm"/>

         <fo:table-body>
              		<xsl:apply-templates select="elementlist[key='aktif']"/>
            </fo:table-body>
          </fo:table>
	<fo:block id='last-page'/>
        </fo:flow>

      </fo:page-sequence>

    </fo:root>
  </xsl:template>


  <xsl:template match="elementlist">

<xsl:for-each select="value[generate-id()=
generate-id(key('categorise',usthesapkodu)[1])]">
     	<xsl:variable name="ustmuhID"><xsl:value-of select="usthesapkodu"
/></xsl:variable>

     	<xsl:variable name="muhkodlar" select="//value[usthesapkodu=$ustmuhID]"
/>

     	<xsl:call-template name="muhkodDetay">
      		<xsl:with-param name="muhkodlar" select="$muhkodlar" />
     	</xsl:call-template>
    </xsl:for-each>

  </xsl:template>



<xsl:template name="muhkodDetay">
		<xsl:param name="muhkodlar" />
		<xsl:variable name="kumkod"/>
		<xsl:variable name="kumadi"/>

	     <xsl:for-each select="$muhkodlar">
        	  <xsl:variable name="muhasebeID" select="muhasebekodu" />
		  <xsl:variable name="tlkalan"
select="$muhkodlar[muhasebekodu=$muhasebeID]/TLkalan"/>

        	<xsl:if test="not(substring($muhasebeID,4,1)='x')">
        	<fo:table-row>

		<fo:table-cell>
		  <fo:block text-align="left" font-size="8pt" >
			<xsl:value-of select="$muhkodlar[muhasebekodu=$muhasebeID]/muhasebekodu"/>
		  </fo:block>
		</fo:table-cell>


          	<fo:table-cell>
          	  <fo:block text-align="right" font-size="8pt">
			<xsl:value-of select='format-number($tlkalan, "###,###.00")'/>
		  </fo:block>
		</fo:table-cell>

	</fo:table-row>

	<!--dovizler -->
	<xsl:for-each select="dovizler/value">
		<xsl:variable name="kur" select="ISBANK_kur"/>
		<xsl:variable name="miktar" select="miktar"/>
		<fo:table-row>
			<fo:table-cell>
		  		<fo:block text-align="right" font-size="8pt" >
				<xsl:value-of select="doviz-adi"/>
		  		</fo:block>
			</fo:table-cell>
			<fo:table-cell>
          	  		<fo:block text-align="right" font-size="8pt">
				<xsl:value-of select='format-number($miktar*$kur, "###,###.00")'/>
		  		</fo:block>
			</fo:table-cell>

		</fo:table-row>
        </xsl:for-each>
        </xsl:if>

        <xsl:if test="substring($muhasebeID,4,1)='x'">
        	<xsl:variable name="kumkod"
select="concat('0***',substring($muhasebeID,1,3))"/>
        	<fo:table-row>
        	<fo:table-cell>
          	  		<fo:block text-align="left" font-size="8pt">
				<xsl:value-of select="$kumkod"/>
		  		</fo:block>
		</fo:table-cell>
          	<fo:table-cell>
          	  <fo:block text-align="right" font-size="8pt">
			<xsl:value-of select='format-number(sum($muhkodlar/TLkalan),
"###,###.00")'/>
		  </fo:block>
		</fo:table-cell>

		</fo:table-row>

        <xsl:for-each select="$muhkodlar/dovizler[generate-id(.) =
generate-id(key('dkey', key)[1])]">

  			<xsl:variable name="kur" select="value/ISBANK_kur"/>
  			<xsl:variable name="mydoviz" select="value/doviz-adi"/>
      	      <xsl:variable name="miktar" select="sum(key('dovizkey',
key)/value/miktar)"/>


			<fo:table-row>
			<fo:table-cell>
		  		<fo:block text-align="right" font-size="8pt" >
				<xsl:value-of select="$mydoviz"/>
		  		</fo:block>
			</fo:table-cell>
			<fo:table-cell>
          	  		<fo:block text-align="right" font-size="8pt">
				<xsl:value-of select='format-number($kur*$miktar, "###,###.00")'/>
		  		</fo:block>
			</fo:table-cell>

		</fo:table-row>

		</xsl:for-each>


        </xsl:if>



        </xsl:for-each>




        <fo:table-row>
        	<fo:table-cell>
        	<fo:block text-align="right" font-size="8pt">
        			ALOO
        	</fo:block>
        	</fo:table-cell>
        </fo:table-row>

</xsl:template>

</xsl:stylesheet>



my XML input is:

  <?xml version="1.0" encoding="ISO-8859-9" ?>
- <Vaziyet xsi:type="java:com.oreilly.hh.QueryTestXML$Rapor"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <elementlist xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">aktif</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>13744500000.00</TLkalan>
  <alacak>151390423099188.00</alacak>
  <muhasebekodu>010</muhasebekodu>
  <kalan>13744500000.00</kalan>
  <borc>151404167599188.00</borc>
  <usthesapkodu>010</usthesapkodu>
  <APKD5>1</APKD5>
  <APKD1>1</APKD1>
  </value>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>22229979625.00</TLkalan>
  <alacak>38987788.06</alacak>
  <muhasebekodu>011</muhasebekodu>
  <kalan>14536.00</kalan>
  <borc>39002324.06</borc>
  <usthesapkodu>011</usthesapkodu>
  <APKD5>3</APKD5>
- <dovizler xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">EUR</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$Dovizler">
  <miktar>3525.00</miktar>
  <doviz-adi>EUR</doviz-adi>
  <ISBANK_kur>1823885.00</ISBANK_kur>
  </value>
  </dovizler>
- <dovizler xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">USD</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$Dovizler">
  <miktar>11011.00</miktar>
  <doviz-adi>USD</doviz-adi>
  <ISBANK_kur>1435000.00</ISBANK_kur>
  </value>
  </dovizler>
  <APKD1>1</APKD1>
  </value>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>3034909059104.68</TLkalan>
  <alacak>59371.90</alacak>
  <muhasebekodu>0270005</muhasebekodu>
  <kalan>2108158.12</kalan>
  <borc>2167530.02</borc>
  <usthesapkodu>027</usthesapkodu>
  <APKD5>3</APKD5>
- <dovizler xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">EUR</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$Dovizler">
  <miktar>-25930.51</miktar>
  <doviz-adi>EUR</doviz-adi>
  <ISBANK_kur>1823885.00</ISBANK_kur>
  </value>
  </dovizler>
- <dovizler xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">GBP</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$Dovizler">
  <miktar>16440.03</miktar>
  <doviz-adi>GBP</doviz-adi>
  <ISBANK_kur>2638534.50</ISBANK_kur>
  </value>
  </dovizler>
- <dovizler xsi:type="java:org.exolab.castor.mapping.MapItem">
  <key xsi:type="java:java.lang.String">USD</key>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$Dovizler">
  <miktar>2117648.60</miktar>
  <doviz-adi>USD</doviz-adi>
  <ISBANK_kur>1435000.00</ISBANK_kur>
  </value>
  </dovizler>
  <APKD1>1</APKD1>
  </value>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>0</TLkalan>
  <alacak>0</alacak>
  <muhasebekodu>027xxxxx</muhasebekodu>
  <kalan>0</kalan>
  <borc>0</borc>
  <usthesapkodu>027</usthesapkodu>
  <APKD5>3</APKD5>
  <APKD1>1</APKD1>
  </value>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>75000000000.00</TLkalan>
  <alacak>78750000000.00</alacak>
  <muhasebekodu>11211</muhasebekodu>
  <kalan>75000000000.00</kalan>
  <borc>153750000000.00</borc>
  <usthesapkodu>112</usthesapkodu>
  <APKD5>1</APKD5>
  <APKD1>1</APKD1>
  </value>
- <value xsi:type="java:com.oreilly.hh.QueryTestXML$XMLDovizElement">
  <TLkalan>0</TLkalan>
  <alacak>0</alacak>
  <muhasebekodu>112xxxxx</muhasebekodu>
  <kalan>0</kalan>
  <borc>0</borc>
  <usthesapkodu>112</usthesapkodu>
  <APKD5>1</APKD5>
  <APKD1>1</APKD1>
  </value>
.
.
.
</elementlist>
</Vaziyet>

what i try to do is:
010 13,744,500,000.00
ALOO
011 22,229,979,625.00
EUR  6,429,194,625.00
USD  15,800,785,000.00
ALOO
0270005  3,034,909,059,104.68
EUR  -47,294,268,231.35
GBP  43,377,586,336.03
USD  3,038,825,741,000.00
0***027 3,034,909,059,104.68
EUR  -47,294,268,231.35
GBP  43,377,586,336.03
USD  3,038,825,741,000.00
ALOO
11211   75,000,000,000.00
0***112  75,000,000,000.00
ALOO
911000  12,197,500,000.00
USD  12,197,500,000.00
911101  377,696,190,200.00
EUR 4,596,190,200.00
USD 373,100,000,000.00
911111 621,139,750,000.00
EUR 200,627,350,000.00
USD 420,512,400,000.00
0***911  1,011,033,440,200.00
EUR 205,223,540,200.00
USD 805,809,900,000.00

In short:
Group the items according to usthesapkodu.
Write the dovizler elements for all of the items as one row.
for the elements whose 4th character is 'x', write the totals for each of the
dovizler elements in that group.

i can be more specific if something isnot clear.
regards.



-----Original Message-----
From: David Carlisle [mailto:davidc@xxxxxxxxx]
Sent: Monday, November 22, 2004 4:12 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [SPAM] - Re: [xsl] understanding key usage - Bayesian Filter
detected spam



  I have a nodeset which consists of 'value' elements like above. I want
  to get a nodeset of B elements whose key values are same.(e.g. all the
  value elements'(in this nodeset) B elements whose keys are 'USD'.)
  if nodeset is -> tempnodeset

  how should i define the select clause and the key?


As you said yourself:

select="$tempnodeset/B[key='USD']


  But the grouping with the key does not work.

You'd need to give more information about what grouping you are trying
to do and what doesn't work.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________


Current Thread
Keywords