[XSLT] Voorloopnullen verwijderen

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

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 02:56
Via een query haal ik een personeelsnummer uit een LDAP database en stop deze in een variabele. Dit werkt goed.

XSLT:
1
2
3
<xsl:variable name="personeelNumberOutput">
<xsl:value-of select="$resultQuery/nds/output/instance/attr[@attr-name='umPersonalNumber']/value/text()"/>
</xsl:variable>


Vervolgens moet ik van bovenstaande variabele de voorloopnullen verwijderen. Binnen XSLT heb je AFAIK geen functie starts-with oid, wel een string-before of string-after. Maar deze functies doen niet wat ik wil.

Bijvoorbeeld:
personeelsnummer 001234 -> output 1234
personeelsnummer 123400 -> output 123400.

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
starts-with() en substring-after() en een recursieve template

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 02:56
Ik was inderdaad iets te voorbarig. Ik ben C#-progger, maar door ziekte van collega moest ik toch maar wat werk overnemen. Afijn, ik heb inmiddels een oplossing

XSLT:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<xsl:template name="VerwijderVoorloopnullen">
    <xsl:param name="personeelsnummer"/>
    <xsl:choose>
        <xsl:when test="starts-with($personeelsnummer,'00000')">
            <xsl:value-of select="substring($personeelsnummer,6)"/>
        </xsl:when>
        <xsl:when test="starts-with($personeelsnummer,'0000')">
            <xsl:value-of select="substring($personeelsnummer,5)"/>
        </xsl:when>
        <xsl:when test="starts-with($personeelsnummer,'000')">
            <xsl:value-of select="substring($personeelsnummer,4)"/>
        </xsl:when>
        <xsl:when test="starts-with($personeelsnummer,'00')">
            <xsl:value-of select="substring($personeelsnummer,3)"/>
        </xsl:when>
        <xsl:when test="starts-with($personeelsnummer,'0')">
            <xsl:value-of select="substring($personeelsnummer,2)"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$personeelsnummer"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Voordeel is dat een personeelsnummer altijd 6 of 7 cijfers heeft. Belangrijkste is dat code op korte termijn functioneel is, iemand nog op-/aanmerkingen?

Code is zeker geen mooie oplossing, daar mag mijn collega over gaan nadenken. ;)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 16-01 10:59

thomaske

» » » » » »

Een recursieve functie is natuurlijk wat mooier:

Heb het niet getest, maar het idee lijkt me duidelijk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<xsl:template name="VerwijderVoorloopnullen">
    <xsl:param name="personeelsnummer"/>
    <xsl:choose>
        <xsl:when test="starts-with($personeelsnummer,'0')">
            <xsl:call-template name="VerwijderVoorloopnullen">
                <xsl:with-param name="personeelsnummer" select="substring($personeelsnummer,2)"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$personeelsnummer"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."