RE: [xsl] xsl:variable and node list

Subject: RE: [xsl] xsl:variable and node list
From: <Jarno.Elovirta@xxxxxxxxx>
Date: Fri, 15 Oct 2004 10:32:36 +0300
Hi,

> thats good but how would i translate this now
>
> <xsl:variable name="withaddress">
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@building,$upperCas
e,$lowerCase),
> translate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@number,$upperCase,
> $lowerCase),tr
> anslate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@street,$upperCase,
> $lowerCase),tr
> anslate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@town,$upperCase,$l
> owerCase),tran
> slate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@postcode,$upperCas
> e,$lowerCase),
> translate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@country,$upperCase
> ,$lowerCase),t
> ranslate($address,$upperCase,$lowerCase))='true']"/>
>      <xsl:copy-of
> select="tblMIMCompanies[contains(translate(@address,$upperCase
> ,$lowerCase),t
> ranslate($address,$upperCase,$lowerCase))='true']"/>
>     </xsl:variable>

Firsth, you have

tblMIMCompanies[contains(translate(@building,$upperCase,$lowerCase),translate
($address,$upperCase,$lowerCase))='true']

which can be simplified to

tblMIMCompanies[contains(translate(@building,$upperCase,$lowerCase),translate
($address,$upperCase,$lowerCase))]

as contains() already returns a boolean value.

Anyhow, if the order is important here, i.e. tblMIMCompanies elements whose
@building matchs must come before the ones whose @number matchs, then you have
to use a different approach, ie. build the RTF and convert that into a
node-set using an extension function. Also, if the above can and must contain
dublicate tblMIMCompanies entries, then you have to go with the RTF to
node-set way.

But, if you just want a set, then

  <xsl:copy-of
select="tblMIMCompanies[contains(translate(@building,$upperCase,$lowerCase),t
ranslate($address,$upperCase,$lowerCase))
                                   and
contains(translate(@number,$upperCase,$lowerCase),translate($address,$upperCa
se,$lowerCase))
                                   and
contains(translate(@street,$upperCase,$lowerCase),translate($address,$upperCa
se,$lowerCase))
                                   and
contains(translate(@town,$upperCase,$lowerCase),translate($address,$upperCase
,$lowerCase))
                                   and
contains(translate(@postcode,$upperCase,$lowerCase),translate($address,$upper
Case,$lowerCase))
                                   and
contains(translate(@country,$upperCase,$lowerCase),translate($address,$upperC
ase,$lowerCase))
                                   and
contains(translate(@address,$upperCase,$lowerCase),translate($address,$upperC
ase,$lowerCase))]"/>

should get you there.

Cheers,

Jarno - Lights Of Euphoria: True Life

Current Thread