xsl-list
[Top] [All Lists]

XSLT sort

2004-05-19 11:49:53
I get some weird problems with this XSLT. If a element has the same attribute "enamn" like another element, it gets duplicated.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="mykey" match="Person" use="@enamn"/>

<xsl:template match="Katalog">
 <xsl:copy>
  <xsl:apply-templates select="Person">
   <xsl:sort select="@enamn"/>
  </xsl:apply-templates>
 </xsl:copy>
</xsl:template>

<xsl:template match="Person">
 <xsl:apply-templates select="@enamn"/>
</xsl:template>

<xsl:template match="@enamn">
 <xsl:for-each select="key('mykey',.)">
  <xsl:copy-of select="."/>
 </xsl:for-each>
</xsl:template>

</xsl:stylesheet>


The input:
<Katalog>
  <Person fnamn="Arvar" enamn="Olsson" tfn="026-789537">
    <Adress adress="Norrav. 34" postnr="50623" postort="Soderhamn"/>
    <Cv>Har arbetat som konsult hos microsoft sedan barnsben</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Orvar" enamn="Orre" tfn="026-782576">
    <Adress adress="Sodrav. 34" postnr="50323" postort="Gavle"/>
    <Cv>Har arbetat som stadare hos ericsson</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Nils" enamn="Olsson" tfn="026-789537">
    <Adress adress="Ostrav. 30" postnr="12453" postort="Boras"/>
    <Cv>arbetslos</Cv>
    <Info alder="24"/>
  </Person>
</Katalog>

Will result in the output:
<Katalog>
  <Person fnamn="Arvar" enamn="Olsson" tfn="026-789537">
    <Adress adress="Norrav. 34" postnr="50623" postort="Soderhamn"/>
    <Cv>Har arbetat som konsult hos microsoft sedan barnsben</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Nils" enamn="Olsson" tfn="026-789537">
    <Adress adress="Ostrav. 30" postnr="12453" postort="Boras"/>
    <Cv>arbetslos</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Arvar" enamn="Olsson" tfn="026-789537">
    <Adress adress="Norrav. 34" postnr="50623" postort="Soderhamn"/>
    <Cv>Har arbetat som konsult hos microsoft sedan barnsben</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Nils" enamn="Olsson" tfn="026-789537">
    <Adress adress="Ostrav. 30" postnr="12453" postort="Boras"/>
    <Cv>arbetslos</Cv>
    <Info alder="24"/>
  </Person>
  <Person fnamn="Orvar" enamn="Orre" tfn="026-782576">
    <Adress adress="Sodrav. 34" postnr="50323" postort="Gavle"/>
    <Cv>Har arbetat som stadare hos ericsson</Cv>
    <Info alder="24"/>
  </Person>

Whats wrong? I use keys to get better performance...

/Tomas
</Katalog>




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