XSL Probleme - Tutorials?!

The_Answer1985

Erfahrenes Mitglied
Hallo zusammen,

habe ein paar Probleme eine XSL zu erstellen... hab haufenweise gegoogelt und auch Tutorials gefunden, nur scheine ich zu "blöd" die Beispiele der Tutorials auf meine XML Datei zu übertragen.

Da mir der Zusammenhang von den Elemente in XSL aber total unklar ist und ich mehr oder weniger am "raten" bin, bräuchte ich ein gutes Tutorial, das bei Null anfängt und nacheinander erklärt, warum man welches Elemente braucht. (z.B. das Element <xls:template ...> ist mir völlig unklar)

Habe bisher mein Glück versucht mit

http://www.zvon.org/xxl/XSLTutorial/Output_ger/contents.html#id
hier verstehe ich die Struktur nicht so ganz.. für mich wild durcheinander geworfene Beispiele...

http://www.usegroup.de/software/xmltutorial/einstieg.html
eigentlich nicht schlecht...aber etwas knapp... Versuche die Bspe auf meine XML anzuwenden bringen immer nur Fehler...

SELF HTML
ist zwar gut zum Nachschlagen, aber zum Neulernen doch etwas unstrukturiert

Nachdem ich anfangs mit dem Editor gearbeitet habe, versuche ich mich gerade mit der Trial Version von Altova XMLSpy.

Danke für eure Hilfe im Voraus,

liebe Grüße
 
Hej,

ein Tutorial habe ich zwar leider nicht zur Hand, aber ich versuche mich mal so im Erklären, was die Templates betrifft. ;)

Du hast in deiner XML-Datei ja verschiedene Elemente - sagen wir mal, du hast ein kleines Adressbuch angelegt. Dort finden sich dann Elemente wie Name, Telefonnummer und Stadt.

Dann hast du als *.xml:
Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
<?xml-stylesheet href="adressbuch.xsl" type="text/xsl" ?>
<!DOCTYPE adressbuch SYSTEM "adressbuch.dtd">


<adressen>
	<eintrag>
		<name>Horst</name>
		<telefonnummer>1234-56789</telefonnummer>
		<stadt>Hintertupfingen</stadt>
	</eintrag>
</adressen>

So. Du erstellst dir dann die *.xsl dazu und willst nun die einzelnen Elemente formatieren. Dazu sprichst du sie mittels xsl:template jeweils an:
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
	<html><head></head><body style="font-family:Verdana; font-size:12pt; color:#333; background:#eee;">
		<xsl:apply-templates />
	</body></html>
</xsl:template>


<xsl:template match="name">
	<p style="font-weight:bold;">
	Name: <xsl:value-of select="." />
	</p>
</xsl:template>

<xsl:template match="telefonnummer">
	<p><em>
	Telefonnummer: <xsl:value-of select="." />
	</em></p>
</xsl:template>

<xsl:template match="stadt">
	<p>
	Stadt: <xsl:value-of select="." />
	</p>
</xsl:template>


</xsl:stylesheet>

match="/" bedeutet, dass du das Wurzelelement ansprichst, was um die anderen herumliegt - in diesem Fall hier also "adressen".
Es soll ja nun eine HTML-Seite erzeugt werden - demzufolge liegen um alle anderen Elemente herum die HTML- und Body-Tags.

Die anderen Elemente - Name, Telefonnummer und Stadt - sprichst du nach dem selben Prinzip an.

Außenrum legst du die Definition, welches Element angesprochen werden soll, dann folgen die HTML-Formatierungsangaben und innerhalb dieser fügst du das Element selber via <xsl:value-of select="." /> ein.


Ich hoffe, das war verständlich. :)


Lieben Gruß
Cherrywine
 
Danke für deinen Post, das hilft mir wenigstens zum Verständnis!

Hab natürlich versucht das wiederum an meine XML Datei anzupassen... aber irgendwo "hackts" bei mir, es ist praktisch egal, was ich mache, entweder ich bekomme einen Fehler oder alle Werte der XML nacheinander ausgegeben.

Meine XML ist im BMECAT Format... das schaut ungefähr so aus:

Code:
<BMECAT version="2005" xmlns="http://www.bmecat.org/bmecat/2005">
    <HEADER>
        <CATALOG>
            <LANGUAGE></LANGUAGE>
            <CATALOG_ID></CATALOG_ID>
            <CATALOG_VERSION></CATALOG_VERSION>
            <CATALOG_NAME></CATALOG_NAME>
            <GENERATION_DATE></GENERATION_DATE>
            <CURRENCY></CURRENCY>
            <PRICE_FLAG type="incl_insurance"></PRICE_FLAG>
            <PRICE_FLAG type="incl_freight"></PRICE_FLAG>
            <PRICE_FLAG type="incl_duty"></PRICE_FLAG>
            <VALID_START_DATE></VALID_START_DATE>
            <VALID_END_DATE></VALID_END_DATE>
            <DELIVERY_TIMES>
                <TIME_SPAN>
                    <TIME_BASE></TIME_BASE>
                    <TIME_VALUE_DURATION></TIME_VALUE_DURATION>
                    <TIME_VALUE_INTERVAL></TIME_VALUE_INTERVAL>
                    <TIME_VALUE_START></TIME_VALUE_START>
                    <TIME_VALUE_END></TIME_VALUE_END>
                </TIME_SPAN>
            </DELIVERY_TIMES>
            <TRANSPORT>
                <INCOTERM></INCOTERM>
                <LOCATION></LOCATION>
            </TRANSPORT>
        </CATALOG>
        <BUYER_IDREF></BUYER_IDREF>
        <SUPPLIER_IDREF></SUPPLIER_IDREF>
        <PARTIES>
            <PARTY>
                <PARTY_ID type="buyer_specific"></PARTY_ID>
                <PARTY_ROLE></PARTY_ROLE>
                <ADDRESS type="buyer">
                    <NAME></NAME>
                    <NAME2></NAME2>
                    <STREET></STREET>
                    <ZIP></ZIP>
                    <ZIPBOX></ZIPBOX>
                    <CITY></CITY>
                    <COUNTRY></COUNTRY>
                    <PHONE></PHONE>
                    <FAX></FAX>
                </ADDRESS>
            </PARTY>
         </PARTIES>
    </HEADER>
    <T_NEW_CATALOG>
        <PRODUCT>
            <SUPPLIER_PID></SUPPLIER_PID>
            <PRODUCT_DETAILS>
                <DESCRIPTION_SHORT></DESCRIPTION_SHORT>
                <DESCRIPTION_LONG/>
                <KEYWORD/>
                <PRODUCT_TYPE></PRODUCT_TYPE>
            </PRODUCT_DETAILS>
            <PRODUCT_ORDER_DETAILS>
                <ORDER_UNIT></ORDER_UNIT>
                <CONTENT_UNIT></CONTENT_UNIT>
            </PRODUCT_ORDER_DETAILS>
            <PRODUCT_PRICE_DETAILS>
                <PRODUCT_PRICE price_type="net_customer">
                    <PRICE_AMOUNT></PRICE_AMOUNT>
                </PRODUCT_PRICE>
            </PRODUCT_PRICE_DETAILS>
        </PRODUCT>
    </T_NEW_CATALOG>
</BMECAT>

Eine Frage habe ich dazu:

Wenn ich ein Element der XML in XSL anspreche (also den Wert ausgegeben lassen möchte), mache ich das mit

(z.B. Name)
Code:
<xsl:value-of select="CATALOG_NAME" />

Worin liegt der Unterschied zwischen

Code:
<xsl:value-of select="CATALOG_NAME" />

und

Code:
<xsl:value-of select="./CATALOG_NAME" />

?

Habe bisher versucht, die xsl teils als Tabelle ausgeben zu lassen, so dass ich den <HEAD> - Tag in ner Tabelle habe und später alle <PRODUCT> - Tags mit einer for-each-Schleife ausgebe.
 
Zurück