Andi: Rekursives Template, Minimum bestimmen

Beitrag lesen

Hallo,

Hallo,

<xsl:template name="minimum_x">
  <xsl:param name="Knoten" />

<xsl:with-param name="Knoten" select="$Knoten[position() != 1]" />
             <xsl:with-param name="min_temp"
select="substring-before($Knoten[1],'
')"/>

Was mit jetzt aufgefallen ist (und ich weiss jetzt nicht ob das nur hier im Forum so steht oder bei dir auch)

bei mir im Code ist ein Leerzeichen und mit "nodes" anstelle von "Knoten" war ein Tippfehler. Hatte das aus einer alten Version herauskopiert.

Im substring-before($Knoten[1],'') hast du kein Leerzeichen im zweiten Argument, also so: substring-before($Knoten[1],' ')

(das mit <xsl:with-param name="nodes"> statt "Knoten" ist wohl ein Tippfehler?))

Wenn ich jetzt das Template:
<xsl:template name="minimum_x">
  <xsl:param name="Knoten" />
  <xsl:param name="min_temp" select="0"/>
  <xsl:if test="$Knoten">
   <xsl:variable name="min-soweit">
    <xsl:call-template name="minimum_x">
     <xsl:with-param name="Knoten" select="$Knoten[position() != 1]" />
     <xsl:with-param name="min_temp" select="substring-before($Knoten[1],' ')"/>
    </xsl:call-template>
   </xsl:variable>
   xsl:choose
    <xsl:when test="$min-soweit &lt; .">
     <xsl:value-of select="$min-soweit" />
    </xsl:when>
    xsl:otherwise
     <xsl:value-of select="." />
    </xsl:otherwise>
   </xsl:choose>
  </xsl:if>
</xsl:template>

auf

<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>

anwende, bekomme ich als Ausgabe:
3569875,45 5896534,23
3552365,56 583256975,56

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 &lt; ." 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.

Beste Grüße
andi

Grüße
Thomas