Andi: Rekursives Template, Minimum bestimmen

Beitrag lesen

Hallo,

Die Anzahl der Elemente ist beliebig und ich benötige Minmal und Maximalwert für x und y. Also für jeweils für Werte vor und nach dem Leerzeichen.

Insgesamt also vier werte: dann wirst du um so was nicht herumkommen (analog dann für minimumY und maximumY mit substring-after()):
<xsl:template name="minimumX">
  <xsl:param name="Knoten" />
  <xsl:variable name="minimum">
   <xsl:if test="$Knoten">
    <xsl:for-each select="$Knoten">
     <xsl:sort select="substring-before(.,' ')" data-type="number" />
     <xsl:if test="position() = 1">
      <xsl:value-of select="number(substring-before(.,' '))" />
     </xsl:if>
    </xsl:for-each>
   </xsl:if>
  </xsl:variable>
  <xsl:value-of select="$minimum" />
</xsl:template>

<xsl:template name="maximumX">
  <xsl:param name="Knoten" />
  <xsl:variable name="maximum">
   <xsl:if test="$Knoten">
    <xsl:for-each select="$Knoten">
     <xsl:sort select="substring-before(.,' ')" data-type="number" order="descending" />
     <xsl:if test="position() = 1">
      <xsl:value-of select="number(substring-before(.,' '))" />
     </xsl:if>
    </xsl:for-each>
   </xsl:if>
  </xsl:variable>
  <xsl:value-of select="$maximum" />
</xsl:template>

Dann ob nun in einer Variable oder in einem xsl:attribut deas entsprechenden Tempalte aufrufen:
<xsl:call-template name="minimumX">
      <xsl:with-param name="Knoten" select="xplan:BPlanAuszug//gml:pos"/>
     </xsl:call-template>

Ein Wert soll herauskommen. Ich hatte gedacht, dass man immer einen Knoten nimmt und den mit dem nächsten oder ähnlich vergleicht, um so den Minimalwert zu bekommen. Das ist glaub eleganter als das Andere. Wobei mir damit auch schon sehr geholfen ist :-)

Nein das ist nicht wirklich eleganter und vor allem in diesem fall auch nicht nötig und wäre auch viel weniger performanter. Recursion sollte man nur anwenden, wenn es wirklich nötig ist ;-)

okidok,

besten Dank nochmal! Habe jetzt ne Ausgabe mit Symbolen in der Mitte meiner Flächen. So wie ich es wollte. Glaube mehr kann man nicht erreichen. Manchmal liegt halt bei ungleichen Flächen der Mittelpunkt außerhalb der Fläche. Denke da muss man mit C++ oder so ran.

Beste Grüße
andi

Grüße
Thomas