Re: [xsl] how to match true and false and display yes and no instead?

Subject: Re: [xsl] how to match true and false and display yes and no instead?
From: Christian Rasmussen <byggemandbob@xxxxxxxxx>
Date: Wed, 27 Jul 2005 22:29:27 +0200
Thank you very much to both of you, Michael Kay and JBryant!

Regarding the closing tag: I'm very much aware of the possibility of
using forward slash. I was using XMLSpy, and it automatically inserts
a closing tag, and I was in a hurry...

Regarding the point you make, JBryant, that it should be easier
putting <xsl:apply-templates/> in all template matches.

According to my limited knowledge of XSLT, this means "fire all
templates that matches subnodes from the context node... Now, it works
fine in many situations, but I think there are also situations where
you dont want ALL template matches to fire on all subnodes, but just
on some of them. Another point regarding this, is
the:<xsl:apply-templates select="../married"> Here I want to fire a
template on a sibling. Here <xsl:apply-templates/>  also doesn't work
because its a sibling and not a subnode....

Or have I totally misunderstood? then please help me out :-)

Michael Kay, you say this:

<xsl:template match="members/profile/married[.='false']">no</xsl:template>
<xsl:template match="members/profile/married[.='true']">yes</xsl:template>

is another way of doing it. Now there are two templates. I have used
<xsl:if> Is templates faster (better) than <xsl:if> ? Or are there
other arguments for using this instead, then I'll change my code.

Thanks a lot for very good inputs :-)

/Christian

On 7/27/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> Another way do this:
>
> <xsl:template match="members/profile/married">
> <xsl:if test=".='false'">no</xsl:if>
> <xsl:if test=".='true'">yes</xsl:if>
> </xsl:template>
>
> is this:
>
> <xsl:template match="members/profile/married[.='false']">no</xsl:template>
> <xsl:template match="members/profile/married[.='true']">yes</xsl:template>
>
> Also, the members/profile/ qualifier is probably redundant.
>
> Michael Kay
> http://www.saxonica.com/
>
>
> > -----Original Message-----
> > From: Christian Rasmussen [mailto:byggemandbob@xxxxxxxxx]
> > Sent: 27 July 2005 18:49
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Re: [xsl] how to match true and false and display
> > yes and no instead?
> >
> > Of course you are right... I was too fast making a sample xml. The
> > real xml-file I'm working on is too complex to post here, so its
> > better with a sample.
> >
> > However, I've made a better sample and actually now it works: Here's
> > the solution:
> >
> > do you have any comments to this?
> > thank-you for respons anyway...
> >
> > XML-FILE:
> > =======
> > <?xml version="1.0" encoding="UTF-8"?>
> > <members>
> >       <profile>
> >               <name>Bill Clinton</name>
> >               <married>false</married>
> >               <kid>joe</kid>
> >       </profile>
> > </members>
> >
> >
> > XSL-FILE:
> > =======
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> > xmlns:fo="http://www.w3.org/1999/XSL/Format";>
> >
> > <xsl:template match="members">
> > members-template is matched!
> > <xsl:apply-templates select="profile/kid"></xsl:apply-templates>
> > </xsl:template>
> >
> > <xsl:template match="members/profile/married">
> > <xsl:if test=".='false'">no</xsl:if>
> > <xsl:if test=".='true'">yes</xsl:if>
> > </xsl:template>
> >
> > <xsl:template match="kid">
> > <xsl:apply-templates select="../married"></xsl:apply-templates>
> > kids-template is matched!
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On 7/27/05, JBryant@xxxxxxxxx <JBryant@xxxxxxxxx> wrote:
> > > Well, if you actually tried to run these templates, your
> > XML parser should
> > > spit out error messages.
> > >
> > > You seem to be trying to use </xsl:apply-templates> to close
> > > <xsl:template>, which isn't XML.
> > >
> > > Assuming you mean
> > >
> > > <xsl:template match="members">
> > > xsl-fo goes here.....
> > > </xsl:template>
> > >
> > > then you want
> > >
> > > <xsl:template match="members">
> > > xsl-fo goes here.....
> > > <xsl:apply-templates/>
> > > </xsl:template>
> > >
> > > Otherwise, the processor gets to members and stops, never
> > processing the
> > > children of members.
> > >
> > > Jay Bryant
> > > Bryant Communication Services
> > > (presently consulting at Synergistic Solution Technologies)
> > >
> > >
> > >
> > >
> > > Christian Rasmussen <byggemandbob@xxxxxxxxx>
> > > 07/27/2005 11:57 AM
> > > Please respond to
> > > xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > >
> > >
> > > To
> > > xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > cc
> > >
> > > Subject
> > > [xsl] how to match true and false and display yes and no instead?
> > >
> > >
> > >
> > >
> > >
> > >
> > > Hi experts,
> > >
> > > It seems to be a pretty simple question, but I'm newbie and I cannot
> > > figure out how to do it :-(
> > > please help me!
> > >
> > > here is some sample xml showing my problem:
> > >
> > > <members>
> > >                  <profile>
> > >                                  <name>Bill Clinton</name>
> > >                                  <married>false</married>
> > >                                  <kid>joe</kid>
> > >                  </profile>
> > > </members>
> > >
> > >
> > > my xsl looks something like this:
> > >
> > > <xsl:template match="members">
> > > xsl-fo goes here.....
> > > </xsl:apply-templates>
> > >
> > > <xsl:template match="members/profile/married">
> > > <xsl:if test=".='false'">no, he is not married</xsl:if>
> > > <xsl:if test=".='true'">yes, he is married</xsl:if>
> > > </xsl:apply-templates>
> > >
> > > <xsl:template match="kid">
> > > xsl-fo goes here.....
> > > <xsl:apply-templates select="../married"></xsl:apply-templates>
> > >
> > > I simply want to display "yes" and "no" instead of "true"
> > and "false".
> > > So I have made a template match which specifically matches
> > the element
> > > which holds the true or false value. After matching this element, I
> > > test whether its true or false, and returns the text instead.
> > >
> > > nothing shows up :-(
> > >
> > > Thanx in advance for you help
> > > /Christian

Current Thread