PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XPath: string-length -Funktion


Ladon
15.05.2006, 10:33
Hallo zusammen.

Ich will aus einer Zeichenkette die so aussieht: "A-K1"
Das ganze aufteilen so dass das Programm mir "A, B, C, D, E, F, G, H, I, J" und "K1" einzelnd ausgibt.

Will das so machen, das er zuerst mal erkennt, das es sich bei
"substring-after(.,'-')" um zwei Zeichen handelt.
Nach dem er das erkannt hat, soll er weitermachen.

Das ganze hab ich nun so realisiert:

<Liste>
<xsl:for-each select="string-to-codepoints(substring-before(., '-')) to
string-to-codepoints(substring-after(., '-'))">
<xsl:if test="string-length(string-to-codepoints(substring-after(.,
'-')))=2">
<xsl:text>ttt</xsl:text>
</xsl:if>
</xsl:for-each>
</Liste>


Es kommt die Meldung, das ein "integer" erwartet wird.
Kann mir jemand sagen, was an dem Code falsch ist?

Bzw. ob es eine leichtere Möglichkeit gibt das Problem zu lösen?


Danke!
Ladon


Coreyl
15.05.2006, 13:39
vermute mal das hier der fehler liegt:
<xsl:if test="string-length(string-to-codepoints(substring-after(.,
'-')))=2">
<xsl:text>ttt</xsl:text>
</xsl:if>

was liefert dir string-to-codepoints zurück?
eine zahl, richtig, aber auch einen INTEGER?
vermute das du bei string-to-codepoints einen STRING bekommst (65, 84,... auch wenns zahlen sind, dennoch als string zurückgeliefert!?)

string-length will aber einen INT wert(?!) weil du ja gegen einen anderen INT wert prüfst...
verstanden? ^^

Ladon
16.05.2006, 08:29
Ich hab das jetzt mal so abgeändert...
Aber es funktioniert so, noch immer nicht richtig...
Zumindest bringt er mir keine Fehlermeldung mehr... ;-)
Kann mir jemand sagen was falsch sein könnte??
Danke


<xsl:when test="contains(.,'-K1')">
<xsl:for-each select="string-to-codepoints(substring-before(., '-')) to
string-to-codepoints(substring-after('J', '-'))">
<xsl:if test="not(exists($unserDoc/Regel/*/LeistungsNummer=.))">
<TEST>
<xsl:value-of select="codepoints-to-string(.)"/>
</TEST>
</xsl:if>
</xsl:for-each>
</xsl:when>











vermute mal das hier der fehler liegt:
<xsl:if test="string-length(string-to-codepoints(substring-after(.,
'-')))=2">
<xsl:text>ttt</xsl:text>
</xsl:if>

was liefert dir string-to-codepoints zurück?
eine zahl, richtig, aber auch einen INTEGER?
vermute das du bei string-to-codepoints einen STRING bekommst (65, 84,... auch wenns zahlen sind, dennoch als string zurückgeliefert!?)

string-length will aber einen INT wert(?!) weil du ja gegen einen anderen INT wert prüfst...
verstanden? ^^