In XSL auf Bilder aus XML verweisen(anzeigen lassen)

Schrumpfi

Lt. Commander
Registriert
Jan. 2011
Beiträge
1.315
Hi,
ich habe mir einfach mal das Ziel gesetzt, die Tabelle der Fußball-WM 2006 (Gruppe A) in Form einer XML und einer XSL für den "Style" darzustellen.
Allerdings komme ich nicht weiter:
Ich möchte vor jedem Ländernamen die jeweilige Flagge einfügen.
Dafür habe ich aber nicht den passenden Code gefunden, der damit klarkommt, dass er keinen direkten Link zum Bild, sondern den Inhalt eines Element in der XML-Datei abrufen soll.
Hat da jemand eine Idee, wie man das lösen könnte?
l.G. Schrumpfi

XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="XSL.xsl" type="text/xsl" ?>

<Gruppe_A>
<item>
<Rang>1</Rang>
<Land>Deutschland</Land>
<Spiele>3</Spiele>
<Siege>3</Siege>
<Niederlagen>0</Niederlagen>
<Unentschieden>0</Unentschieden>
<Tore>8</Tore>
<Gegentore>2</Gegentore>
<Punkte>9</Punkte>

</item>
<item>
<Rang>2</Rang>
<Land>Ecuador</Land>
<Spiele>3</Spiele>
<Siege>2</Siege>
<Niederlagen>1</Niederlagen>
<Unentschieden>0</Unentschieden>
<Tore>5</Tore>
<Gegentore>3</Gegentore>
<Punkte>6</Punkte>

</item>
<item>
<Rang>3</Rang>
<Land>Polen</Land>
<Spiele>3</Spiele>
<Siege>1</Siege>
<Niederlagen>2</Niederlagen>
<Unentschieden>0</Unentschieden>
<Tore>2</Tore>
<Gegentore>4</Gegentore>
<Punkte>3</Punkte>

</item>
<item>
<Rang>4</Rang>
<Land>Costa Rica</Land>
<Spiele>3</Spiele>
<Siege>0</Siege>
<Niederlagen>3</Niederlagen>
<Unentschieden>0</Unentschieden>
<Tore>3</Tore>
<Gegentore>9</Gegentore>
<Punkte>0</Punkte>

</item>
</Gruppe_A>

XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head> <title>WM 2006 Gruppe A</title></head>
<body>
<h style="font-size:45px; font-family:verenda">Gruppe_A</h>
<br/>
<br/>
<br/>
<table border="3">
<tr bgcolor="darkorange" style="font-size:23px;">
<th>Rang</th>
<th>Land</th>
<th>Spiele</th>
<th>Siege</th>
<th>Niederlagen</th>
<th>Unentschieden</th>
<th>Tore</th>
<th>Gegentore</th>
<th>Punkte</th>
</tr>
<xsl:for-each select="Gruppe_A/item">
<tr bgcolor="kacke" style="font-size:22px;">
<td><xsl:value-of select="Rang"/></td>
<td><xsl:value-of select="Land"/></td>
<td><xsl:value-of select="Spiele"/></td>
<td><xsl:value-of select="Siege"/></td>
<td><xsl:value-of select="Niederlagen"/></td>
<td><xsl:value-of select="Unentschieden"/></td>
<td><xsl:value-of select="Tore"/></td>
<td><xsl:value-of select="Gegentore"/></td>
<td><xsl:value-of select="Punkte"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>
 
Du kannst mittels <xsl:choose> testen, welches Land verarbeitet wird, und dann jeweils den Code für das gewünschte Bild einfügen.
 
Den Ansastz verstehe ich nicht wirklich?
Wie füge ich das Bild denn überhaupt ein?
Achja und das Bild darf nicht einfach in der XSL verlinkt sein, es darf nur in der XML stehen und über die XSL abgerufen werden!
 
Nach dem, was Du geschrieben hast, bin ich davon ausgegangen, dass die Bilder in der XSL-Datei definiert werden sollen. Wo liegen die Bilder? In der XML kann ich keine Verweise o.ä. entdecken!
 
Die Aufgabenstellung ist leider, dass die XSL nur als Stylesheet fungieren soll und die ganzen Informationen in der XML liegen..
Ja, da ist auch noch nichts, das soll noch dahin!
Habe überlegt dort
<Flagge>Flagge.jpg</Flagge>
hinzuschreiben o.Ä. aber ich weiß eben nicht, wie man das überhaupt lösen kann?!
 
Ja, wenn man die Information in der XML-Datei hinterlegen möchte/muss, gibst Du halt jeweils den Pfad zur Datei an. Mit dem Pfad generierst Du in der XSL den passenden Code, also wohl das <img>-Tag. Ich scheine Dein Problem nicht zu verstehen!?
 
Zuletzt bearbeitet:
Ja, so war auch meine Überlegung!
Allerdings verstehe ich nicht ganz, wie ich den img Tag da einbauen soll?!
Ich denke, dass dieses <img scr> oder so ähnlich einen direkten Pfad erwartet und keinen Verweis auf ein Element aus der XML, oder? Als ich es so versucht habe wurde jedenfalls einfach nur der der Pfad als Text angezeigt, aber kein Bild!
 
HTML (und nichts anderes generierst du ja) ist nun einmal Text. Dass das Bild später angezeigt wird, dafür ist der Browser verantwortlich. Also ist die ganze Kunst hierbei den Pfad aus dem XML in das src-Attribut zu überführen.
 
Schrumpfi schrieb:
Ja, so war auch meine Überlegung!
Allerdings verstehe ich nicht ganz, wie ich den img Tag da einbauen soll?!
Ich denke, dass dieses <img scr> oder so ähnlich einen direkten Pfad erwartet und keinen Verweis auf ein Element aus der XML, oder?

Sicher. Aber der Pfad steht doch dann in der XML-Datei und Du generierst das <img> Tag mit dieser Information. Die eigentliche Datei (auf den der Pfad verweist) muss natürlich auf dem Web-Server auch entsprechend zu finden sein.


Schrumpfi schrieb:
Als ich es so versucht habe wurde jedenfalls einfach nur der der Pfad als Text angezeigt, aber kein Bild!

Dann war der generierte Code nicht korrekt! Den solltest Du posten! Und die Ausgangsdateien gleich mit! Das Bild existiert auch auf dem Server?
 
Du musst natürlich den Wert auslesen... versuch mal <xsl:value-of select="Flagge"/>. Das select verlangt einen XPath-Ausdruck, je nachdem, wo du bist, kann der natürlich variieren.
 
Das kann ja eigentlich garnicht funktionieren, da dieses <xsl:value-of select="Flagge"/> ja nur den Wert? ausliest, der in <Flagge> steht. Also steht dann in der Spalte der Pfad, aber es wird kein Bild angezeigt!
Oder meinst du das irgendwie anders?

Ich bin jetzt auf diesen Code gestoßen:

<xsl:attribute name="href">
<xsl:value-of select="../Flagge" />
</xsl:attribute>
<xsl:attribute name="target">new</xsl:attribute>
<img>
<xsl:attribute name="src">
<xsl:value-of select="." />
</xsl:attribute>
</img>

Der müsste doch eigentlich genau das machen, was ich möchte, oder?
Nur verstehe ich nicht wie ich den bei mir einbauen kann..


Problem gelöst!! (: (Und das SO einfach!)

<td> <img> <xsl:attribute name="src">
<xsl:value-of select="Flagge" />
</xsl:attribute>
</img>
</td>

Nurnoch eine Frage, wo schreibe ich jetzt die anderen Attribute hin? Also Höhe, Breite usw.?
 
Zuletzt bearbeitet:
Du musst da natürlich schon selbst was drum herum bauen....

Code:
<img>
  <xsl:attribute name="src">
    <xsl:value-of select="blabla/Flagge" />
  </xsl:attribute>
</img>


e.


Nurnoch eine Frage, wo schreibe ich jetzt die anderen Attribute hin? Also Höhe, Breite usw.?

Vielleicht versuchst du jetzt mal zu verstehen, was du da überhaupt tust, dann brauchst du die Frage nicht mehr stellen ;)
Du hast bereits ein Attribut hinzugefügt, was hindert dich daran, noch weitere hinzuzufügen?

Problem gelöst!! (: (Und das SO einfach!)

Gerade deswegen ja :rolleyes:
 
Zuletzt bearbeitet:
Vielen Dank, das wäre die Lösung, aber bin 10sec vorher sogar selbst darauf gekommen! Danke!!
Jetzt halt nurnoch die Frage, wo ich die Höhe usw noch hinschreiben kann. Habe gerade herumprobiert, da hat allerdings nichts wirklich geklappt.

Tut mir leid, bin halt noch blutiger Anfänger auf dem Gebiet! Habe bisher noch nicht wirklich die Bedeutung der Tags usw. verstanden, aber jetzt wird es langsam klarer! Habe halt nur Codes kopiert.

Also einfach <xsl:attribute name="height"> Aber wo kommt der Wert hin?
 
Zuletzt bearbeitet:
Aber wie?
<xsl:value-of select=...... passt da ja nicht hin

Gut, dass hat sich auch erledigt, habe jetzt einfach in die XML als Attribute von Flagge noch Höhe und Breite hinzugefügt..
Vielen Dank für eure Hilfe bzw. den Denkanstoß!
 
Zuletzt bearbeitet:
Zurück
Oben