Matthias: XSLT Transformation von XML Format1 nach XML Format2

Hallo zusammen,

mein Problem ist, ich möchte aus einer XML Datei mithilfe von XSLT
eine andere XML mit anderen Elementen (vorstellbar auch HTML Elemente)
erstellen. Dabei möchte ich abhängig von dem Wert eines Attributes eine Aktion auslösen.

Bsp: XML File

<?xml version="1.0"?>
<personen>
<name maennlich="True">Matthias</name>
<name maennlich="False">Christine</name>
<name maennlich="True">Florian</name>
<name maennlich="False">Nadja</name>
</personen>

Aus diesem File möchte ich HTML Code generieren und dabei abhängig
vom Attribut 'maennlich' Frauen und Maenner in getrennten Listen
ausgeben.

Knackpunkt ist die Anweisung <xsl:if .......> mit der ich nicht viel
anfangen kann, da relativ wenig Anschauungsmaterial verfügbar ist.

Hat jemand Erfahrung mit XSLT und kann mir helfen bzw.
einen Tipp geben?

Im Voraus Danke

Matthias

  1. Hallo Matthias,

    mein Problem ist, ich möchte aus einer XML Datei mithilfe von XSLT
    eine andere XML mit anderen Elementen (vorstellbar auch HTML Elemente)
    erstellen. Dabei möchte ich abhängig von dem Wert eines Attributes eine Aktion auslösen.

    Bsp: XML File

    <?xml version="1.0"?>
    <personen>

    »»  <name maennlich="True">Matthias</name>
    »»  <name maennlich="False">Christine</name>
    »»  <name maennlich="True">Florian</name>
    »»  <name maennlich="False">Nadja</name>

    </personen>

    Aus diesem File möchte ich HTML Code generieren und dabei abhängig
    vom Attribut 'maennlich' Frauen und Maenner in getrennten Listen
    ausgeben.

    Du benötigst in deinem Template etwa folgendes Konstrukt:

    <xsl:template match="name">
    xsl:choose
      <xsl:when test="@maennlich='false'">
        schreibe in Liste für weibliche Personen
      </xsl:when>
      xsl:otherwise
        schreibe in Liste für männliche Personen
      </xsl:otherwise>
    </xsl:template>

    Prüfung auf Bedingung erfolgt im Attribut test des choose-Elements.
    Wenn dabei true rauskommt wird die folgende Aktion ausgeführt, bei false die Aktion im otherwise-Zweig.

    Hoffe das hilft dir.

    Gruß
    Franz

    1. Du benötigst in deinem Template etwa folgendes Konstrukt:

      <xsl:template match="name">

      »»  xsl:choose

      <xsl:when test="@maennlich='false'">
          schreibe in Liste für weibliche Personen
        </xsl:when>
        xsl:otherwise
          schreibe in Liste für männliche Personen
        </xsl:otherwise>
      </xsl:template>

      Prüfung auf Bedingung erfolgt im Attribut test des choose-Elements.
      Wenn dabei true rauskommt wird die folgende Aktion ausgeführt, bei false die Aktion im otherwise-Zweig.

      Hoffe das hilft dir.

      Gruß
      Franz

      Vielen Dank für die Hilfe Franz!!!
      Denke das hilft mir schon ein ganzes Stück weiter!!

      Gruss

      Matthias

      1. Hallo zusammen,

        ich habe nun ein Testfile geschrieben bekomme aber eine Fehlermeldung
        meines Browsers IE 5.0

        Hier das kleine XML Testfile:
        ------------------------------------------------------
        <?xml version="1.0"?>
        <?xml-stylesheet type="text/xsl" href="when.xsl"?>

        <name maennlich='False'>Nadja</name>

        -------------------------------------------------------

        Und hier mein stylesheet, das abhänging vom Attribut maennlich
        'Frau' oder 'Mann' schreiben soll:

        -------------------------------------------------------
        <?xml version="1.0"?>
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

        <xsl:template match="name">
          xsl:choose
            <xsl:when test="@maennlich = 'False'">
               xsl:textFrau</xsl:text>
            </xsl:when>
            xsl:otherwise
               xsl:textMann</xsl:text>
            </xsl:otherwise>
           </xsl:choose>  
        </xsl:template>

        </xsl:stylesheet>
        --------------------------------------------------------

        Fehlermeldung des Browsers:

        Expected token 'eof' found '='. @maennlich -->=<-- 'false'

        Kann mir jemand sagen was hier falsch ist?

        Im Voraus herzlichen Dank

        Gruß

        Matthias

        1. Hallo Matthias!

          <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
          Kann mir jemand sagen was hier falsch ist?

          Ja, die bige Zeile.
          Du muss
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          verwenden.

          Der IE hat eine Weile nur den WD des XSL-spze. von W3C unterstützt, die neueren Versionen von IE unterstützen aber schon den Spez.

          Das führt natürlich zu Inkompatibilität der Dateien unter versch. Borserversionen.

          Grüße
          Thomas