Announcement

Collapse
No announcement yet.

Varible aus einer Schleife retten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Varible aus einer Schleife retten

    Hallo XSLT-Fans )

    Folgendes Problem raubt mir den letzten Nerv

    In einer xsl:for-each-Schleife teste ich eine Knotenmenge auf ein bestimmtes Wert eines Attributes. Falls der Attribut belegt ist wird der Inhalt des Unterlementes ausgegeben.
    Ansonsten möchte ich ausgeben, dass das Element nicht belegt ist.
    Wenn ich die Textausgabe mit in die Schleife nehme und mit xsl:choose arbeite, dann bekomme ich unter Umständen mehrere Einträge "nicht belegt".
    Ich möchte aber nur einmal das ausgeben. Unabhängig dafon wie oft die untersuchte Elemente vorkommen.

    Ein Versuch mit einer "flip_flop" Variblen, die in der Schleife gesetzt wird, schlug fehl .

    <PRE>
    ...
    <xsl:variable name="flip" select="0"/>

    <xsl:for-each select="Element">
    <xsl:if test="@attribut = ABC">
    <xsl:value-of select="unterelement"/>
    <xsl:variable name="flip" select="1"/>
    </xsl:if>
    </xsl:for-each>
    <xsl:if test="$flip = 0">nicht belegt</xsl:if>
    ...
    </PRE>

    Es wird der Inhalt des Unterlementes und der String "nicht belegt" ausgegeben.

    Hat jemand eine Idee warum die Variable aus der Schleife nicht gerettet wird?

    Mit besten Grüßen<br>
    Dieter

  • #2
    mit choose kannst du auch eine art if-else anweisung programmieren.

    hier wird in abhängigkeit von vorhandenen knoten eine aussage getroffen.

    in der dtd wurde festgelegt, dass man höchsten eine festnetz und eine handy nummer haben kann.Sonst wäre die erste Aussage ja u.U. nicht richtig.

    <pre>
    <xsl:template match="tel">
    <xsl:choose>
    <xsl:when test="(count(festnetz |handy) mod 2)=1">
    Das Mitglied ist nur über 1 Nummer zu erreichen.

    <xsl:apply-templates/>
    </xsl:when>
    <xsl:when test="(count(festnetz |handy)= 0)">
    Von diesem Mitglied existiert kein Telefon- Eintrag.

    <xsl:apply-templates/>
    </xsl:when>
    <xsltherwise>
    das Mitglied hat 2 Nummern:

    <xsl:apply-templates/>
    </xsltherwise>
    </xsl:choose>
    </xsl:template>
    </pre>
    vielleicht hilft dir das ja.

    gruß
    doenn

    Comment


    • #3
      Hallo Michael,

      danke für den Vorschlag.
      Aber stell Dir vor, (aus welchen Gründen auch immer) für eine Person gibt es mehrere Elemente <tel> als Nachbarn. Dann greift die choose-Sequenz nicht und mann hat unter Umständen mehrere Outputs gleichen Inhalts.

      Gruß
      Diete

      Comment


      • #4
        Hallo,

        ich würde an dieser Stelle ein Overloaded Template benutzen, so dass du in dem Template an sich die Abfrage befindet, z.B.
        &lt;xsl:template match="benutzer[Element/@attribute]"/&gt;

        Kannst du mal eine Beispiel XML-Datei posten, dann kann man das Problem besser lösen.

        Michael Klos

        Comment


        • #5
          Hallo und vielen Dank für Euere Kommentare!

          unter der Adresse: http://www.dimich.2in.de/Forumfrage.html können<br> Beispiel-Dateien für dieses Posting angesehen und runtergaladen werden.

          Beste Grüße<br>
          Diete

          Comment

          Working...
          X