RE: [xsl] How to do an 'existence' test in XSL?

Subject: RE: [xsl] How to do an 'existence' test in XSL?
From: George James <GeorgeJ@xxxxxxxxxxxxxxx>
Date: Wed, 22 Dec 2004 18:38:08 -0000
Mukul
To me, your solution is not as simple as it could be.

And I don't think this is really a grouping problem.  As the op said this is
an 'existence' problem.  If any <gui type="alertBox"> element exists then
generate the appropriate output.

Assuming that the list of gui types is fixed then the following would work:

  <xsl:template match="/root">
    <root>
      <xsl:if test=" gui[@type='alertBox']  ">
        <alertBox/>
      </xsl:if>
      <xsl:if test=" gui[@type='tooltip']  ">
        <tooltip/>
      </xsl:if>
      <xsl:if test=" gui[@type='help']  ">
        <help/>
      </xsl:if>
    </root>
  </xsl:template>

Regards
George

George James Software
www.georgejames.com
An InterSystems Technology Partner



> -----Original Message-----
> From: Mukul Gandhi [mailto:mukul_gandhi@xxxxxxxxx]
> Sent: 22 December 2004 17:05
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] How to do an 'existence' test in XSL?
>
>
> Here is a simple approach you can try..
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>
> <xsl:output method="xml" indent="yes" />
>
> <xsl:template match="/root">
>   <root>
>     <xsl:for-each select="gui">
>       <xsl:if test="not(@type =
> preceding-sibling::gui/@type)">
>         <xsl:element name="{@type}" />
>       </xsl:if>
>     </xsl:for-each>
>   </root>
> </xsl:template>
>
> </xsl:stylesheet>
>
> When the above XSL is applied to XML -
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
>   <gui type="alertBox"></gui>
>   <gui type="tooltip"></gui>
>   <gui type="help"></gui>
>   <gui type="tooltip"></gui>
>   <gui type="alertBox"></gui>
>   <gui type="tooltip"></gui>
>   <gui type="help"></gui>
> </root>
>
> The o/p recieved is -
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
>   <alertBox/>
>   <tooltip/>
>   <help/>
> </root>
>
> Regards,
> Mukul
>
> --- ben@xxxxxxxxxxxxx wrote:
>
> > I'm having great difficulty understanding how/if XSL
> > provides the tool to satisfy the following simple requirement.
> >
> > Lets say I have some simple xml like :
> >
> > <gui type="alertBox">...</gui>
> > <gui type="tooltip">...</gui>
> > <gui type="help">...</gui>
> > <gui type="tooltip">...</gui>
> > <gui type="alertBox">...</gui>
> > <gui type="tooltip">...</gui>
> > <gui type="help">...</gui>
> >
> > To simplify things... imagine transforming this
> > document in such a way that we have something like :
> >
> > <alertBox/>
> > <tooltip/>
> > <help/>
> >
> > i.e. I would like the XSL to result in one output
> > per gui type.
> >
> > So there is the problem... how on earth do I process
> > the xml such that it results in an output per +type+
> > rather than for each instance (is that explained
> > well enough?)... i.e. it's easy to match on the
> > attributes but each match produces output so I would
> > get :
> >
> > <alertBox/><alertBox/>
> > <tooltip/><tooltip/><tooltip/>
> > <help/><help/>
> >
> > Can anyone offer advice on the way in which I ought
> > to approach this problem?
> >
> > Kindest regards,
> >
> > Ben
> >
> >
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - Easier than ever with enhanced search. Learn
> more. http://info.mail.yahoo.com/mail_250
>
> --
> No virus found in this incoming message.
> Checked by AVG Anti-Virus.
> Version: 7.0.296 / Virus Database: 265.6.4 - Release Date: 22/12/2004
>
>

--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.296 / Virus Database: 265.6.4 - Release Date: 22/12/2004

Current Thread