Hallo,
ich schreibe gerade an einem XSLT- Stylesheet. Gestern ist mir aufgefallen, das ich versehentlich bei der XSLT- Version 1.0 angegeben habe.
Tja, das ist auch die Versionsnummer der aktuellen Spezifikation.
Ich habe dann einfach die Versionsnummer in 2.0 geändert,
Selber Schuld ;-) und außerdem ein "substring($bound_x,1,2)*100000" ist eigentlich schlechter Stil.
allerdings bekam ich dann einige Fehlermeldung in Bezug auf die bei Rechnungen verwendeten Datentypen für die Zeilen 2 und 4 im ersten Auszug des Stylesheets.
Is irgendwas besonders zu beachten, wenn man Text in Zahlen konvertiert?
In XPath 1.0 gilt, dass bei Verwendung eines nummerischen Operators die Werte implizit zu Nummern konvertiert werden:
nahmst du "foo-bar" galt (und gilt) das als ein Knoten mit dem Namen "foo-bar", nahmst du "foo - bar" galt das implizit als "number(foo) - number(bar)".
Das ist eine der Inkompatibilitäten zwischen XPath 1.0 und XPath 2.0. Die implizite Konvertierung bei Argumenten in Funktionen wird nicht mehr durchgeführt (es gibt zwar eine Ausname), so das z.B. für substring(), substring-after(), substring-befor() die Argumente tatsächlicn Strings sein müssen. bzw. als String genommen werden. Deshalb liefert ein XSLT2-Prozessor einen Type-Error.
Wie du festgestellt hast, kannst du das XPath 1.0 Verhalten mit expliziter Konvertierung - "number()" - fordern.
Du kannst es aber verkürzen:
<xsl:variable name="offset_y" select="number(substring($y1,1,2))*100000"/>
Grüße
Thomas