Subject: RE: [xsl] Expression Logic Problem From: "Renick, Garrel" <garrel@xxxxxxxx> Date: Wed, 31 Jul 2002 14:41:59 -0500 |
Thanks for replying, Joerg and Robert. I was already sorting (I didn't show the template that applied my example template), so your first suggestion worked flawlessly, Joerg. Your explanations saved my sanity. Regards, Garrel Renick -----Original Message----- From: Joerg Heinicke [mailto:joerg.heinicke@xxxxxx] Sent: Wednesday, July 31, 2002 1:55 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Expression Logic Problem Hello Garrel, self::node()[1] does not work, because self::node() selects the only the current node --> it's only one, so self::node()[1] is true for every node. position() does not work (I can only guess, because this part of stylesheet is missing) because you apply-templates through either <xsl:apply-templates select="*"/> or <xsl:apply-templates select="item"/> or <xsl:apply-templates select="node()"/>. So you either get only once output of 'Snow White' or nothing because text nodes are counted too. The solution to your problem is a grouping method, for example using preceding-sibling axis or Muenchian Grouping. 1. preceding-sibling: Instead of <xsl:if test="self::node()[1]"> use <xsl:if test="not(preceding-sibling::field/@id = @id)"> 2. Muenchian Grouping: <!-- this is the grouping key --> <xsl:key name="fields" match="field" use="@id"/> <!-- this one is for faster access to resultfields --> <xsl:key name="resultfields" match="resultfield" use="@id"/> <xsl:template match="record"> <xsl:apply-templates select="field[generate-id() = generate-id(key('fields', @id))]" mode="unique"/> </xsl:template> <xsl:template match="field" mode="unique"> <xsl:value-of select="key('resultfields', @id)"/>: <xsl:apply-templates select="key('fields', @id)"/> </xsl:template> <xsl:template match="field"> <xsl:value-of select="."/><br/> </xsl:template> Furthermore I would remove disable-output-escaping, because you don't need it and it's not portable: http://www.dpawson.co.uk/xsl/sect2/N2215.html Regards, Joerg Renick, Garrel wrote: > Hello. I'm trying to solve an expression logic problem and I'm stumped. > I'm trying to determine if the context node I'm matching in a > template is the first element. If it is, I want to prepend > some information. If it isn't first, I just want to display the > data. However, it seems as though every element matches my > expression that tries to determine if the element is first. > If someone could help me understand my delimma, I'd greatly > appreciate it. Here is a sample of my data and my template: > > My data: > <document> > <configure> > <server> > <resultfield id="100">Snow White</resultfield> > <resultfield id="50">Mickey Mouse</resultfield> > </server> > </configure> > <record> > <field id="100">Snow White and the Seven Dwarfs</field> > <field id="100">A story about some dwarves and their friend</field> > <field id="50">Fantasia</field> > <record> > </document> > > My Template: > > <xsl:template match="field"> > <xsl:variable name="id" select="@id"/> > <xsl:choose> > <!-- when the ID of the resultfield returned by the server matches > the ID of a resultfield to display in the configuration data > and it is the first one, display the resultfield value and precede > it with the display name from the configuration data. If it isn't > first, just display the resultfield value > --> > <xsl:when test="/document/configure/server/resultfield/@id=$id"> > <xsl:if test="self::node()[1]"> > <!-- I've also tried position()=1 here without success --> > <xsl:value-of select="/document/configure/server/resultfield[@id=$id]"/>: > </xsl:if> > <xsl:value-of disable-output-escaping="yes" select="."/> > <br/> > </xsl:when> > <xsl:otherwise/> > </xsl:choose> > </xsl:template> > > The data I expect and want: > > Snow White: Snow White and the Seven Dwarfs > A story about some dwarves and their friend > Mickey Mouse: Fantasia > > > The data I get: > > Snow White: Snow White and the Seven Dwarfs > Snow White: A story about some dwarves and their friend > Mickey Mouse: Fantasia > > > Regards, > Garrel Renick > garrel@xxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Expression Logic Problem, Joerg Heinicke | Thread | Re: [xsl] Expression Logic Problem, Robert S. Koberg |
[xsl] Re: Summing multiple attribut, Dimitre Novatchev | Date | Re: [xsl] Expression Logic Problem, Robert S. Koberg |
Month |