ilja: warum kommt es doppelt vor?

meine XML:

<Baugruppen>
 <Baugruppe Typ="SM">
  <X>0</X>
  <Y>1</Y>
  <X>2</X>
 </Baugruppe>
 <Baugruppe Typ="SB">
  <X>0</X>
  <Y>1</Y>
  <X>2</X>
 </Baugruppe>
</Baugruppen>

meine XSL:

<xsl:for-each select="Baugruppen/Baugruppe">
<input type="text" name="Typ" value="{@Typ}" readonly="readonly" style="text-align:center"/>
</xsl:for-each>

mein problem ist, dass er es doppelt anzeigt. also zwei inputs. eine mit SM die andere mit SB.
wie kann ich das problem umgehen?
danke,
ilja

  1. Hallo ilja!

    <xsl:for-each select="Baugruppen/Baugruppe">
    <input type="text" name="Typ" value="{@Typ}" readonly="readonly" style="text-align:center"/>
    </xsl:for-each>

    mein problem ist, dass er es doppelt anzeigt. also zwei inputs. eine mit SM die andere mit SB.
    wie kann ich das problem umgehen?

    Das kommt drauf an, was Du vor hast.
    Aber wenn Du nur 1 Element ausgeben willst, warum nimmst Du dann eigentlich for-each, oder verstehe ich Dein XSL nur nicht?

    MfG
    Götz

    --
    [remote-signature:http://www.stud.uni-karlsruhe.de/~ubaxf/self/selfforum_signatur/selfforum_signatur.php]
    1. Hallo ilja!

      <xsl:for-each select="Baugruppen/Baugruppe">
      <input type="text" name="Typ" value="{@Typ}" readonly="readonly" style="text-align:center"/>
      </xsl:for-each>

      mein problem ist, dass er es doppelt anzeigt. also zwei inputs. eine mit SM die andere mit SB.
      wie kann ich das problem umgehen?

      Das kommt drauf an, was Du vor hast.
      Aber wenn Du nur 1 Element ausgeben willst, warum nimmst Du dann eigentlich for-each, oder verstehe ich Dein XSL nur nicht?

      MfG
      Götz

      ja, es muss nur 1 Element ausgegeben werden.
      warum nicht for-each? was sollte ich deiner meinung dann nehmen?

      mfg,
      ilja

      1. Hallo ilja!

        ja, es muss nur 1 Element ausgegeben werden.
        warum nicht for-each? was sollte ich deiner meinung dann nehmen?

        Weil for-each eine Schleifenanweisung ist, und deswegen eigentlich nur dann sinnvoll eingesetzt ist, wenn man auch irgendwas in einer Schleife durchlaufen will (Siehe auch SELFHTML / XML/DTDs / Darstellung von XML-Daten / XSLT-Elemente / xsl:for-each (für jedes Element aus einer Menge wiederholen)).

        Du könntest ja das Element, das Du ausgeben willst einfach direkt ansprechen?!

        MfG
        Götz

        --
        Losung für Mittwoch, 13. Oktober 2004
        Er ist's, der wechseln lässt Zeiten und Stunden; er setzt Könige ab und setzt Könige ein. (Daniel 2,21)
        Nicht der ist tüchtig, der sich selbst empfiehlt, sondern der, den der Herr empfiehlt. (2. Korinther 10,18)
        (Losungslink)
        1. Hallo,

          Weil for-each eine Schleifenanweisung ist,

          Da loopt aber nix! Es ist eine Mehrfachverarbeitungsanweisung.

          MfG, Thomas

  2. Hallo,

    meine XSL:

    <xsl:for-each select="Baugruppen/Baugruppe">
    <input type="text" name="Typ" value="{@Typ}" readonly="readonly" style="text-align:center"/>
    </xsl:for-each>

    mein problem ist, dass er es doppelt anzeigt. also zwei inputs. eine mit SM die andere mit SB.

    xsl:for-each macht das, was man erwartet: Fuer jedes Vorkommen von Baugruppen/Baugruppe wird ein input-Element erzeugt.

    wie kann ich das problem umgehen?

    Wenn es nur das erste Vorkommen sein soll:

    <input type="text" name="Typ" value="{Baugruppen/Baugruppe[1]/@Typ}" readonly="readonly" style="text-align:center"/>

    oder innerhalb von xsl:for-each entsprechend pruefen auf den Attributwert oder die aktuelle Position bzgl. Baugruppe:

    <xsl:if test="@Typ = 'SM'">
      <input ... />
    </xsl:if>

    bzw.

    <xsl:if test="position() = 1">
      <input ... />
    </xsl:if>

    MfG, Thomas