RE: [xsl] How to sort?

Subject: RE: [xsl] How to sort?
From: <Jarno.Elovirta@xxxxxxxxx>
Date: Thu, 14 Oct 2004 11:45:38 +0300
Hi,

> I want pick only Article elements where attribute info="main"
>
> info-attribute is not located on the Document level, only on
> Article level,
> so when info="main" located it should be placed in the same
> originating Document node
> wheter info-atribute is located on Document level or not.
>
> I need to order output XML by Chapter, chapter-attribute, on
> Document-level. (i,ii,1,2 ... n)
>
> Then I need to sort the output on Article level by state, ascending.
>
> the output XML should look like this
>
>
> <?xml version="1.0"?>
>
> <Document title="1" chapter="i" href="file1.xml" filter="food">
> 	<Article title="1.3" info="main" filter="drink" state="2"/>
> 	<Article title="1.2" info="main" filter="food" state="3"/>
> </Document>
>
> <Document title="2" chapter="ii" href="file2.xml" filter="drink">
>     <Article title="2.1" info="main" filter="drink" state="1"/>
>     <Article title="2.2" info="main" filter="food" state="2"/>
> </Document>
>
> <Document title="4" chapter="2" href="file2.xml" filter="">
> 	<Article title="3.2" info="main" filter="food" state="1"/>
> </Document>

  <xsl:template match="/">
    <xsl:apply-templates select="Documents/Document[Article/@info =
'main']"/>
  </xsl:template>
  <xsl:template match="Document">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:for-each select="Article[@info = 'main']">
        <xsl:sort select="@state" data-type="number"/>
        <xsl:copy-of select="."/>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>

Note that your output is not well-formed XML and the stylesheet above will
recreate the output example.

Cheers,

Jarno - Seabound: Contact (Assemblage 23 remix)

Current Thread