Thomas J.S.: XSL / Bildausgabe...

Beitrag lesen

Hallo,

ich möchte gern bestimmte Bilder ausgeben.
Dazu habe ich einmal versucht bei der Bildausgabe eine Variable mit dem Wert zu übergeben.
Leider funktioniert dies überhaupt nicht.
Dann habe ich direkt versucht genau ein bestimmtes Bild aus dem XML-File herauszuholen. Dies hat leider auch nicht funktioniert.
Das Bild mit der id='5' wurde nicht ausgegeben.
Was mache ich falsch?
Und wie kann ich es schaffen, dass immer genau das Bild ausgegeben wird,
dessen id über die Handbuchstruktur gerade in der Variable gespeichert ist??

<img src="Bilder/{//Bild[@id=$bildRef]}" alt="{//Bild/@alt[@id=$bildRef]}" width="{//Bild/@width[@id=$bildRef]}"
heigth="{//Bild/@height[@id=$bildRef]}" />

Sowas wie: //Bild/@alt[@id=$bildRef] kann nicht funktionieren.
Ein Attribut (in dem Fall @alt) hat keinen Kindknoten, du kannst also auch nicht auf eines nicht vorhandenen Attributes eine attributes zugreifen.

Was du meinst ist:
<img src="Bilder/{//Bild[@id=$bildRef]}" alt="{//Bild[@id=$bildRef]/@alt}" width="{//Bild[@id=$bildRef]/@width}"
heigth="{//Bild[@id=$bildRef]/@height}" />

Wenn ich deine Schema betrachte, dass steht die URL des Bildes aber nciht im Element "Bild" selbst, sondern in dessen @src-Attribut.
Also müsste dein XSL so aussehen:
<img src="Bilder/{//Bild[@id=$bildRef]/@src}" alt="{//Bild[@id=$bildRef]/@alt}" width="{//Bild[@id=$bildRef]/@width}"
heigth="{//Bild[@id=$bildRef]/@height}" />

ABER, weil du in deiner Variable $bildRef etwas falsches machst, kann das auch nciht funktionieren:

<xsl:template match="KapitelRef">
  <xsl:variable name="bildRef">
   <xsl:value-of select="BildRef/@id" />
   <br />
  </xsl:variable>

  1. da es mehrere BildRef-Elemente geben kann, ist schon überhaupt fraglich, welches Element denn die Variable nehmen soll.
  2. value-of sorgt dann dafür, dass es immer nur eines genommen wird und zwar das erste BildRef, das value-of über den Weg läuft.
  3. am Ende siehst deine Variable etwa so aus:

bild123<br />

und jetzt willst du ein Bild suchen dessen ID "bild123<br />" lautet.
Das geht natürlich nicht.
Ein: <xsl:variable name="bildRef" select="BildRef/@id" /> behebt, Problem 3 und telilweise 2. Aber Problem 1 bleibt: welche von mehreren BildRef-Elementen soll denn genommen werden?

Grüße
Thomas