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: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 27 Jul 2005 20:13:10 +0100
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