|
Subject: Re: [xsl] If/then/else confusion From: Syd Bauman <Syd_Bauman@xxxxxxxxx> Date: Tue, 25 Dec 2012 15:00:10 -0500 |
Can you provide some sample input for which the Prefix='A' is not
working? Are you using XSLT 1 or XSLT 2 (or 3)? It can make a big
difference, here.
I'm not sure I understand the problem thoroughly, but remember that
in XSLT 2 (and I presume in 3)
Prefix != 'A'
means "is there any member of the sequence of my children <Prefix>
elements whose string value is not 'A'?", not "are all of the members
of the sequence of my children <Prefix> elements something other than
'A'?".
I'm not sure that's very well expressed. Here is an experiment you
can run to prove the point.
input
-----
<?xml version="1.0" encoding="UTF-8"?>
<stuff>
<sort-us-maybe n="1">
<Prefix>A</Prefix>
<Prefix>B</Prefix>
<Prefix>C</Prefix>
</sort-us-maybe>
<sort-us-maybe n="2">
<Prefix>D</Prefix>
<Prefix>E</Prefix>
<Prefix>F</Prefix>
</sort-us-maybe>
<sort-us-maybe n="3">
<Prefix>A</Prefix>
<Prefix>A</Prefix>
<Prefix>A</Prefix>
</sort-us-maybe>
</stuff>
transform
---------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text"/>
<xsl:template match="/stuff">
<xsl:apply-templates select="sort-us-maybe"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="sort-us-maybe">
<xsl:text>
</xsl:text>
<xsl:value-of select="concat( @n, '--')"/>
<xsl:text>
Prefix=A: </xsl:text>
<xsl:value-of select="Prefix = 'A'"/>
<xsl:text>
Prefix!=A: </xsl:text>
<xsl:value-of select="Prefix != 'A'"/>
<xsl:text>
not(Prefix=A): </xsl:text>
<xsl:value-of select="not( Prefix = 'A' )"/>
<xsl:text>
not(Prefix!=A): </xsl:text>
<xsl:value-of select="not( Prefix != 'A' )"/>
</xsl:template>
</xsl:stylesheet>
output
------
1--
Prefix=A: true
Prefix!=A: true
not(Prefix=A): false
not(Prefix!=A): false
2--
Prefix=A: false
Prefix!=A: true
not(Prefix=A): true
not(Prefix!=A): false
3--
Prefix=A: true
Prefix!=A: false
not(Prefix=A): false
not(Prefix!=A): true
> Hello, I am trying to modify a sort-select statement I worked out a
> very long time ago. In the original, I wanted not to sort by a
> <Prefix> if it were an 'A' and this code does just that:
>
> <xsl:sort select="if( Prefix!='A' ) then Prefix else ''"/>
>
> I am not sure why its positive version does not work: <xsl:sort
> select="if( Prefix='A' ) then '' else Prefix"/>
>
> However, my new task is to not sort by (1) <Prefix> if the prefix
> is 'A' or, (2) if the <CatalogName> contains 'SG'.
>
> In the positive the statement look is:
>
> <xsl:sort select="if( Prefix='A' or contains(CatalogName, 'SG')) then
> '' else Prefix"/>
>
> That statement somehow works for the second filter, [the contains],
> but not the first [the prefix='A'].
>
> I have no idea what is going on and would appreciate any help I can
> get. Thanks.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] If/then/else confusion, Mark Wilson | Thread | Re: [xsl] If/then/else confusion, Mark Wilson |
| [xsl] If/then/else confusion, Mark Wilson | Date | Re: [xsl] If/then/else confusion, Mark Wilson |
| Month |