Hallo,
Was mir eigentlich unklar ist, was du in der Variable "min-soweit" erreichen möchtest.
Außerdem, du muss bedenken, dass ein Komma als Dezimaltrenner in XSLT nicht funktioniert. Deshalb wird ein "$min-soweit < ." nie wahr werden.
Min-soweit sollte wie eine temporale Varibale sein, damit ich den minimalen Wert der Koordinaten herausbekomme (also in diesem Fall 3552365,56). Ich möchte von einer Fläche den Mittelpunkt bestimmen. Daher benötige ich jeweils den Minimal- und Maximalwert von den 2 Werten mit der vornestehenden 3 und dasselbe für die Werte mit der 5 vorne.
Das Komma als Trennzeichen ist in meinen Daten ein Punkt. Das sollte ja funktionieren.
Aber ich glaub das Problem ist, das er immer alle Werte ausgibt und nicht nur den Minimalwert. Denn ich habe auch schon öfters Ausgaben bekommen, was alle Daten des XML- Dokumetes beinhaltet.
angewendet auf diese Datei:
<data>
<testdata>
<gml>3569875.45 5896534.23</gml>
<gml>3552365.56 583256975.56</gml>
</testdata>
</data>
mit
<xsl:call-template name="minimum_x">
<xsl:with-param name="Knoten" select="/data/testdata/gml"/>
</xsl:call-template>
und:
<xsl:template name="minimum_x">
<xsl:param name="Knoten" />
<xsl:if test="$Knoten">
<xsl:variable name="min-soweit">
<xsl:for-each select="$Knoten">
<xsl:sort select="substring-before(.,' ')" data-type="number" order="ascending" />
<xsl:if test="position() = 1">
<xsl:value-of select="number(substring-before(.,' '))" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<h4>min-soweit: <xsl:value-of select="$min-soweit" /></h4>
<!-- xsl:choose
<xsl:when test="$min-soweit < number(substring-before(.,' '))">
<strong>min-soweit <:</strong><xsl:value-of select="$min-soweit" />
</xsl:when>
xsl:otherwise
<strong>substring-before():</strong><xsl:value-of select="substring-before(.,' ')" />
</xsl:otherwise>
</xsl:choose> -->
</xsl:if>
</xsl:template>
bekommst du das kleinste Wert, also in diesem Fall "3552365.56".
Allerdings: Saxon (7 bzw. 8) liefert hier ein "3.55236556E6" also ein Fließkommazahl, der MSXML und der XSL-Proz. von Oxygen liefern "3552365.56".
(Für den Vergleich ist es eigentlich egal)
Denn du den auskommentierten Teil wieder einkommentierst liefern die versch. Prozessoren wiederum versch. Ergebnisse (diesmal ist der MSXML der ausreißer).
Es ist jetzt also dir, wie und wo du das Template aufrufst, bzw. was du noch in der jetzt auskommentierten Stelle dann machst.
Ich würde das Template in einem Variable im "eigentlichen Tempalte aufrufen:
<xsl:variable name="minimum_blabla">
<xsl:call-template name="minimum_x">
<xsl:with-param name="Knoten" select="/data/testdata/gml"/>
</xsl:call-template>
</xsl:variable>
und dann mit dem Wert den Vergleich machen (also das was jetzt im auskommentierten Teil steht).
Grüße
Thomas