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

RE: [xsl] XML/XSLT formatting problem


Subject: RE: [xsl] XML/XSLT formatting problem
From: "Chris Hicks" <chrish2000@xxxxxxxxxxxxxx>
Date: Thu, 6 Jan 2005 20:49:51 +1100

Thanks Michael,

This has further been complicated by the fact that I have image ID's in the
result set that are repeated..in what is essentially a de-normalised
structure

Eg. 

<results lastid="9">
  <image>
    <id>37</id>
    <imagetitle>Fred</imagetitle>
    <imagelocation>fred.jpg</imagelocation>
    <imagesubject>Fred</imagesubject>
  </image>
  <image>
    <id>9</id>
    <imagetitle>Wilma</imagetitle>
    <imagelocation>wilma.jpg</imagelocation>
    <imagesubject>Wives</imagesubject>
  </image>
  <image>
    <id>9</id>
    <imagetitle>Wilma</imagetitle>
    <imagelocation>wilma.jpg</imagelocation>
    <imagesubject>Women</imagesubject>
  </image>
  <image>
    <id>9</id>
    <imagetitle>Wilma</imagetitle>
    <imagelocation>wilma.jpg</imagelocation>
    <imagesubject>Fred</imagesubject>
  </image>
  <image>
    <id>22</id>
    <imagetitle>Barney</imagetitle>
    <imagelocation>barney.jpg</imagelocation>
    <imagesubject>Bam Bam</imagesubject>
  </image>
  <image>
    <id>22</id>
    <imagetitle>Barney</imagetitle>
    <imagelocation>barney.jpg</imagelocation>
    <imagesubject>Betty</imagesubject>
  </image>
  <image>
    <id>24</id>
    <imagetitle>Dino</imagetitle>
    <imagelocation>dino.jpg</imagelocation>
    <imagesubject>Dino</imagesubject>
  </image>
  <image>
    <id>24</id>
    <imagetitle>Dino</imagetitle>
    <imagelocation>dino.jpg</imagelocation>
    <imagesubject>Fred</imagesubject>
  </image>
</results>

So what I have is a key on id at the top of my template:

<xsl:key name="idkey" match="image" use="id"/>
..

Then I want to output a line for each unique ID using:

<xsl:for-each select="photographs::[count(. | key('idkey', id)[1])=1]">
..

Is there any way in the above line I can apply the restriction that the id
must be in a sibling of the image with the @lastid so I only output items
with id's of 22 and 24?

Cheers,

Chris




> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx] 
> Sent: Thursday, 6 January 2005 8:29 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] XML/XSLT formatting problem
> 
> 
> <xsl:template match="results">
>   
>   <xsl:apply-templates
> select="image[id=current()/@lastid]/following-sibling::*">
>    ...
> 
> Michael Kay
> http://www.saxonica.com/
> 
> > -----Original Message-----
> > From: Chris Hicks [mailto:chrish2000@xxxxxxxxxxxxxx]
> > Sent: 06 January 2005 07:09
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] XML/XSLT formatting problem
> > 
> > Hi,
> > 
> > I have a problem where I need to start printing values from 
> a nodeset 
> > starting from a certain position in the set.
> > 
> > My xml looks similar to this:
> > 
> > <results lastid="9">
> >   <image>
> >     <id>37</id>
> >     <imagetitle>Fred</imagetitle>
> >     <imagelocation>fred.jpg</imagelocation>
> >   </image>
> >   <image>
> >     <id>22</id>
> >     <imagetitle>Barney</imagetitle>
> >     <imagelocation>barney.jpg</imagelocation>
> >   </image>
> >   <image>
> >     <id>9</id>
> >     <imagetitle>Wilma</imagetitle>
> >     <imagelocation>wilma.jpg</imagelocation>
> >   </image>
> >   <image>
> >     <id>12</id>
> >     <imagetitle>Dino</imagetitle>
> >     <imagelocation>dino.jpg</imagelocation>
> >   </image>
> >   <image>
> >     <id>1</id>
> >     <imagetitle>Bam Bam</imagetitle>
> >     <imagelocation>bambam.jpg</imagelocation>
> >   </image>
> > </results>
> > 
> > I need to check the "lastid" attribute in the result node 
> when looping 
> > through the nodeset in order to know when to start printing results 
> > (this represents the last id printed on the previous page).  In the 
> > above example I want to start printing results starting 
> from id = 12.
> > 
> > Any tips on where to begin would be appreciated.
> > 
> > Cheers,
> > 
> > 
> > Chris


Current Thread
Keywords
xml