Wie geht man überhaupt vor bei XSLT?

Looky

Erfahrenes Mitglied
Hallo,

ich bin ein absoluter Newbie im, Thema XSLT. Nun habe ich die Aufgabe bekommen, ein XSLT zu schreiben, dass eine XML Datei, in eine andere Sprache übersetzt.

Beispiel:

Die Ursprungs-XML Datei sieht so aus:

Code:
<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet href="test.xsl" type="text/xsl"?> 
<VZV-PARTNER  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.vodafonelivepartners.com/schema/VZV-PARTNER.xsd"> 
  <PARTNER-PI> 
   <TRANSFORMER name="VZV-DEFAULT"/> 
  </PARTNER-PI> 
  <PARTNER-CHARGE> 
   <AUTHORIZE-USAGE serviceid="my service id"/> 
  </PARTNER-CHARGE> 
  <PARTNER-BODY page-template="wallpaper-download"> 
   <VZV-DEFAULT> 
    <CONTAINER type="IMAGE"> 
     <IMAGE href="iphone.jpg"/> 
    </CONTAINER> 
   </VZV-DEFAULT> 
  </PARTNER-BODY> 
</VZV-PARTNER>

und rauskommen muss quasi gültiger HTML Code, sodass das Bild angezeigt wird.

Hier der Inhalt meiner XSL Datie:

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

<xsl:template match="/">
<html>
	<head>
		<title>Fit-ML Image Test</title>
	</head>
	<body>
	<xsl:apply-templates />

	<img>
		<xsl:attribute name="src">
			<xsl:value-of select="VZV-PARTNER/PARTNER-BODY/VZV-DEFAULT/CONTAINER/IMAGE/@href"/>
	        </xsl:attribute>
	</img>
	</body>
</html>
</xsl:template>


</xsl:stylesheet>

Das habe ich auch soweit hinbekommen. Hier nun einige Fragen dazu, auf die ich mir keinen Reim machen kann:

1) Ich kann ja nicht einfach in die urpsprungs-XML Datei das hier
Code:
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
mit reinkopieren. Ich teste das ganze zur Zeit mit dem Firefox (also die XML einfach im Firefox öffnen) Im Produktiven Leben, wie weiß dann die XML Datei, dass sie genau diese xsl Datei nehmen soll? Das sagt der XML Datei wahrscheinlich dann der Server oder?

2) Wie gehe ich denn generell eigentlich vor? Ich kann dass hier
Code:
	<img>
		<xsl:attribute name="src">
			<xsl:value-of select="VZV-PARTNER/PARTNER-BODY/VZV-DEFAULT/CONTAINER/IMAGE/@href"/>
	        </xsl:attribute>
	</img>
ja nicht für alle möglichen auftretenen Fälle machen. Sprich für tabellen, für Farben usw. Oder gibt es da ein 'Mittel, mit dem ich das irgendwie vereinfachen kann?

3) Desweiteren verstehe ich nicht wie zum Kreuzgeier ich das gewollte Design hinbekommen. Angenommen es soll eine Tabelle mit 2 Zellen sein und diese Tabelle soll im linken Feld ein Bild haben, dass müsste ja ewig viele ifs im xsl geben?!

Ich weiß die meisten Fragen sind entweder dumm oder unvollständig aber ich versuche mir gerade ein Grundgerüst an Wissen darüber anzueignen, aber ich würde gern erstmal das Prinzip bzw. die Grundsätzliche herangehensweise verstehen ;)

Danke und lieben Gruß
Christian
 
Hallo Looky,

folgendes XSL-Stylesheet legt in der HTML-Datei eine Tabelle mit zwei Spalten an, wobei in der linken Spalte das Bild sein sollte.
Code:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>

<xsl:template match="/">
  <html>
    <head>
      <title>Fit-ML Image Test</title>
    </head>
    <body>
      <table border="1" cellspacing="0" cellpadding="4">
        <tr>
          <th>Bild</th>
          <th>Adresse</th>
        </tr>
        <xsl:apply-templates />
      </table>
    </body>
  </html>
</xsl:template>

<xsl:template match="PARTNER-BODY">
  <tr>
    <td>
      <img>
        <xsl:attribute name="src">
          <xsl:value-of select="VZV-DEFAULT/CONTAINER/IMAGE/@href"/>
        </xsl:attribute>
      </img>
    </td>
    <td>
      <xsl:value-of select="VZV-DEFAULT/CONTAINER/IMAGE/@href"/>
    </td>
  </tr>
</xsl:template>

</xsl:stylesheet>
Das XSL:APPLY-TEMPLATES-Element wendet das andere Template innerhalb des ersten Tepmlates für jedes "PARTNER-BODY"-Kindelement an. In deiner XML-Datei gibt aber jetzt nur ein solches Kind. Wie würde die XML-Datei mit mehreren Partnern oder mehreren Bildern aussehen?

Zur ersten Frage:
Wenn du die XSL-Transformation vom Browser machen lässt, dann musst du das XSL-Stylesheet natürlich in der XML-Datei verlinken. Du kannst das aber auch beim Client per Script machen. Hier ist ein Beispel in JavaScript [JavaScript-Funktion ConvertXML2HTML()] dazu, das allerdings nur im IE funktioniert. Im Server könntest du die Transformation beispielsweise mit PHP machen und dann das Transformationsergebnis (die HTML-Datei) an den Client ausliefern.
 
Zuletzt bearbeitet:
ok, cool, aber ich muss ein xsl script bauen, das individuell einsetzbar ist. sprich das bild könnte mal in der rechten, mal in der linken spalte stehen. mal hat die tabelle eine hintergrundfarbe mal nicht

mal handelt es sich um buttons mal um textfelder oder formulare.

kann ich das alles überhaupt in einer einzigen xls datei erschlagen? ich fühl mich da ein wenig hilflos.
 

Neue Beiträge

Zurück