[xslt] contains() case-insensitive

Pagina: 1
Acties:
  • 280 views sinds 30-01-2008
  • Reageer

  • Juup
  • Registratie: Februari 2000
  • Niet online
De standaard contains() functie is case sensitive. Nu heb ik een xslt met daarin:
XSLT:
1
2
3
<xsl:if test="contains(text, 'airco')">
    <xsl:text>Joepie er zit een airco in</xsl:text>
</xsl:if>

'text' is een elementnaam in mijn xml file.

Hoe zorg ik er nu voor dat in de <text></text> het woord Airco of AIRCO ook gematcht wordt? Iemand een idee?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik heb wel een idee, maar erg mooi is het niet: zet de text eerst om naar lowercase met translate en test dan of daar de gezochte string in lowercase in staat. dan krijg je zoiets:
XSLT:
1
test="contains(translate(text, 'ABC...XYZ', 'abc...xyz'), 'airco')"

je zou ook kunnen kijken of je een library kunt gebruiken die dit ondersteunt.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Hmmmm... dat is geen slecht idee. Erg lelijk inderdaad maar beter dan niets ;)

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Eelis
  • Registratie: Januari 2003
  • Laatst online: 21-02-2015
.

[ Voor 136% gewijzigd door Eelis op 18-02-2015 23:58 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik snap er niks van.
edit:
overbodige beschrijving van overmatig drank en softdrugsgebruik
en toch neem ik de moeite om ff in het boek van de XSLT kabouter te kijken:

behold, de XSLT kabouter:
Afbeeldingslocatie: http://www.vb2themax.com/Books/XSLTProgReference/cover.gif

De XSLT kabouter zegt:

NEE, er bestaat geen case-insensitive string compare in XSLT 1.0

MAAR

met een beperkte kakaterset (zoals ASCIIi)kun je wel een truucje uithalen: voordat je je string compared, convert je naar lowercase en vergelijkt ze dan:

code:
1
translate($myInputString, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')

[ Voor 11% gewijzigd door Genoil op 07-12-2003 11:55 ]


  • Juup
  • Registratie: Februari 2000
  • Niet online
Is het ook mogelijk om in de test="" een OR te gebruiken? Ik kreeg zoiets niet aan het werk:
code:
1
<xsl:if test="contains(text, 'airco')|contains(text, 'Airco')">...</xs...>

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
gewoon 'or' ipv '|' :)
Pagina: 1