XSL Problem:Bedingung 2x true

Bionicman

Mitglied
Hi Leute,
hab mal wieder ein Problem und zwar stimmt mit meiner choose when "Schleife" etwas nicht -> die Bedingung ist komischerweise immer true..
Das ganze sieht (grob) folgendermaßen aus:

XML Datei:
Code:
<element>
<title lang="de"> Deutsche Überschrift</title>
<title lang="en">Englische Überschrift</title>
<text1> <!-- .. sadkdasldnas --></text1>
<text2> <!-- ..asdjaskdlasdk --></text2>
</element>

XSL Datei:
Code:
<xsl:template match="element">
<xsl:choose>
<xsl:when test="title/@lang='de'">
    <xsl:value-of select="text1"/>
</xsl:when>
<xsl:when test="title/@lang="'en'">
    <xsl:value-of select="text2"/>
</xsl:when>
</xsl:choose>
sobald man diese Dateien kompiliert, werden zwei HTML Dateien erstellt, eine deutsche 'name'.html und eine englische 'name_en'.html
In der deutschen Datei sollte natuerlich der deutsche Text stehen, in der englischen Datei der englische Text (is klar). Leider kommt in beiden Dateien der deutsche Text, d.h. die Bedingung ist immer true....
Hoffe mal ihr könnt mir helfen, Grüße
 

Bane

Grünschnabel
also erstmal wäre statt

Code:
<xsl:when test="title/@lang="'en'">
<!-- ein " zuviel -->

Code:
<xsl:when test="title/@lang='en'">

besser :)

und hast du es schonmal ohne die ' ' probiert ? bei mir klappt sowas immer ohne ...
 

Bionicman

Mitglied
Das eine " war sowieso net im Code, aber danke für den Tipp, werds dann mal ohne die ' ' ausprobieren ;)
€dit: funktioniert immer noch nicht :sad:
 
Zuletzt bearbeitet:
Du bekommst immer true zurück, weil Du in Deinem <xsl:template match="element"> immer nur das erste Element <title> testest.
Das zweite wird nie erreicht und daher nie getestet.
Du mußt entweder
a) <xsl:apply-templates select="title"> hinzufügen und in der title-template die Abfragemachen (hier weden dann nämlich alle title-kinder von element durchgegangen)

oder b)
in Deiner element-template eine <xsl:for-each>-schleife einbauen, die jedes title-kind durchgehen soll.
Code:
<xsl:template match="element">
<xsl:for-each select="title">
   <xsl:choose>
   <xsl:when test="@lang='de'">
      <xsl:value-of select="//element/text1"/>
   </xsl:when>
   <xsl:when test="@lang="'en'">
       <xsl:value-of select="//element/text2"/>
   </xsl:when>
   </xsl:choose>
</xsl:for-each>
Hier mußt Du auf die Richtigkeit der xpath-ausdrücke achten (nicht getestet)
 

Neue Beiträge