# 2 Attribute in einer xsl



## BaxterStockman (31. Mrz 2011)

hai ich hab ein Problem

ich hab ne xml datei und ein schema xsd und ne xsl dazu. alle dateien sind wohlgeformt und valide. ich will dass wenn ich die xml im browser oeffne er mir nen namen und das dazugehoerige auto und dessen daten ausgibt. das auto element hat ein attribut, wenn das attribut auch verschrottet steht soll die hintergrundfabre rot werden. also hab ich den code so formuliert:

```
<xsl:for-each select="//Auto">
<xsl:choose>
<xsl:when test="@status='verschrottet'">
<div style ="font-family:'Helvetica',Times,serif;background-color:red;">
<xsl:value-of select="Bezeichnung"/>
<xsl:call-template name="rest"></xsl:call-template>
</div>
<br/>
</xsl:when>

<xsl:otherwise>
<div style ="font-family:'Helvetica',Times,serif;background-color:yellow;">
<xsl:value-of select="Bezeichnung"/>
<xsl:call-template name="rest"></xsl:call-template>
</div>
<br/>
</xslotherwise>
</xsl:choose>
</xsl:for-each>
```

funktioniert auch alles, wird alles richitg angezeigt. So jetzt hab ich aber auch in dem autoelement ein besitzer element, das ebenfalls ein attribut hat. wenn das attribut auf weiblich gesetzt ist soll die fabre blau werden und ansosnten schwarz

also hab ich das so hingeschrieben


```
<xsl:choose>
<xsl:when test="@Geschlecht='weiblich'">
<div style="font-family:'Helvetica',Times,serif;font-weight:bold;color:blue;">
<xsl:value-of select ="Besitzer"/>
</div>
</xsl:when>

<xsl:otherwise>
<div style="font-family:'Helvetica',Times,serif;font-weight:bold;color:green;">
<xsl:value-of select ="Besitzer"/>
</div>
</xsl:otherwise>
</xsl:choose>
```

genau vor dem anderen choose statement. meine xml datei sieht so aus


```
<Auto status="verschrottet">
<Bezeichnung>
<Marke>Dodge</Marke>
<Typ>Grand Caravan</Typ>
</Bezeichnung>
<Technisches>
<Baujahr>2006</Baujahr>
<Kmstand>77.300</Kmstand>
<Leistung>
<PS>180</PS>
<KW>132</KW>
</Leistung>
</Technisches>
<Farbe>blau</Farbe>
<Besitzer Geschlecht="weiblich">
<Name>Tina</Name>
</Besitzer>
</Auto>
```

er zeigt aber alle namen in gruen an egal was ich mach. er springt automatisch sofort in die erste ohterwise schleife. es ist so als ob er das attribut mit dem namen weiblich gar nicht wahrnimmt bzw. es falsch liest anstatt weiblich irgendwas anderes. Ich hab alles 1000mal auf case-sensitive und richitge schreibweise geprueft alles gleich. alle dokumente valide und wohlgeformt.

wo ist der fehler? ich arbeite seit 3 tagen dran und komm nicht drauf


----------



## SlaterB (31. Mrz 2011)

mit [c]<xsl:for-each select="//Auto">[/c]
bist du auf der Ebene eines Autos, dessen Parameter kannst du mit [c]when test="@status=[/c] testen,
[c]when test="@Geschlecht=[/c] funktioniert analog nur wenn das genauso ein Attribut von Auto ist

du musst [c]when test="Besitzer[@Geschlecht=..]"[/c] schreiben, sofern ich die Syntax korrekt wiedergebe, 
notfalls ein [c]<xsl:for-each select="Besitzer">[/c]  drumherum 
und zur Ausgabe dann [c]<xsl:value-of select="."/>[/c] oder [c]<xsl:value-of select="Name"/>[/c]


----------



## BaxterStockman (31. Mrz 2011)

wie geil, das funktioniert ! besten DANK!


----------

