[XML]Formatierung über XSL
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
auslese
code
dank
darstellung
datei
dokumentation
folgende abschnitt
folgenden aufbau
hinweis
kenntnis
offset
ordner
reihenfolge
sektion
spalte
start
typ
url
vertiefen
wert bemerkungen
-
moin Leute, ich bins mal wieder.
ich habe ein Projekt einer Dokumentation und möchte das mit einer XML-Datei machen.
Nun habe ich z.B. folgenden Aufbau:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE document SYSTEM "style.dtd"> <?xml-stylesheet type="text/xsl" href="style.xsl" ?> <document> <Group title="Nitro Header"> <adress type="Magic Stamp" offset="0x0000" size="4" value="0x4E415243">NARC</adress> <adress type="Konstante" offset="0x0004" size="4" value="0x0001FEFF"></adress> <adress type="Dateigröße" offset="0x0008" size="4" value=""></adress> <adress type="Header Größe" offset="0x000C" size="2" value="16"></adress> <adress type="# Sektionen" offset="0x000E" size="2" value="3"></adress> </Group> <Group title="File Alocation Table Block(FATB)"> <adress type="Magic Stamp" offset="0x0000" size="4" value="0x42544146">FATB</adress> <adress type="Größe des Abschnitts" offset="0x0004" size="4" value=""></adress> <adress type="Anzahl der Dateien" offset="0x0008" size="4" value=""></adress> <space>Der folgende Abschnitt wiederholt sich für jede Datei</space> <adress type="Offset des Dateianfangs" offset="0x0000" size="4" value="">Relative Adressierung zum Start der FIMG-Sektion</adress> <adress type="Offset des Dateiendes" offset="0x0004" size="4" value="">Relative Adressierung zum Start der FIMG-Sektion</adress> </Group> <Group title="File Name Table Block(FNTB)"> <adress type="Magic Stamp" offset="0x0000" size="4" value="0x42544E46">FNTB</adress> <adress type="Größe des Abschnitts" offset="0x0004" size="4" value=""></adress> <space>Root Ordner</space> <adress type="Ordner Startoffset" offset="0x0000" size="4" value=""></adress> <adress type="Position der ersten Datei" offset="0x0004" size="2" value=""></adress> <adress type="Anzahl der Ordner" offset="0x0006" size="2" value="">Im Root Ordner</adress> <space>Datei/Ordner</space> <adress type="Erstes Offset" offset="0x0000" size="4" value=""></adress> <adress type="Position der ersten Datei" offset="0x0004" size="2" value=""></adress> <adress type="Übergeordnetes Verzeichniss" offset="0x0006" size="2" value=""></adress> <adress type="Größe des Namens" offset="0x0008" size="1" value=""></adress> <adress type="Name" offset="0x0009" size="-" value="">Name der Datei oder des Ordners(Länge ist von Offset 0x0008 abhängig!)</adress> <adress type="Verzeichniss Nummer" offset="-" size="2" value="">Offset = 0x0009+(Wert von 0x0008)</adress> </Group> <Group title="File IMaGes(FIMG)"> <adress type="Magic Stamp" offset="0x0000" size="4" value="0x474D4946">FIMG</adress> <adress type="Größe des Abschnittes" offset="0x0004" size="4" value=""></adress> </Group> </document>
Jetzt möchte ich gerne dies Als Tabelle ausgeben. Dazu habe ich folgende xsl-Datei:
<?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> <title>looperhacks|Hacking Doku</title> <link href="../images/favicon.ico" rel="icon" type="image/ico" /> <link href="styles.css" rel="stylesheet" type="text/css" /> </head> <body> <ul> <xsl:apply-templates /> </ul> </body> </html> </xsl:template> <xsl:template match="Group"> <li> <div class="group"> <span class="headline"><xsl:value-of select="@title" /></span> <table border="1"> <thead> <td>Typ</td> <td>Offset</td> <td>Groesse</td> <td>Wert</td> <td>Bemerkungen</td> </thead> <tbody> <xsl:for-each select="adress"> <tr> <td><xsl:value-of select="@type" /></td> <td><xsl:value-of select="@offset" /></td> <td><xsl:value-of select="@size" /></td> <td><xsl:value-of select="@value" /></td> <td><xsl:value-of select="." /></td> </tr> </xsl:for-each> <xsl:for-each select="space"> <tr> <td colspan="5"><xsl:value-of select="." /></td> </tr> </xsl:for-each> </tbody> </table> </div> </li> </xsl:template> </xsl:stylesheet>
Es funktioniert alles Perfekt; nur werden die <adress> und <space> Tags nicht in der Reihenfolge ausgegeben, in der sie im Code stehen, sondern erst die <adress> und dann die <space>. Wie kann ich das Skript umändern, dass es funktioniert? ?( Ich weiß, woran es liegt, aber ich weiß nicht, wie ich es beheben kann.
Danke im Vorraus. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du hast die Spalte in deinem THEAD vergessen, evtl. liegt es daran.
<thead> <tr> <td>Typ</td> <td>Offset</td> <td>Groesse</td> <td>Wert</td> <td>Bemerkungen</td> </tr> </thead>
-
... <tbody> <xsl:for-each select="*"> <tr> <xsl:if test="name() = 'adress'"> <td><xsl:value-of select="@type" /></td> <td><xsl:value-of select="@offset" /></td> <td><xsl:value-of select="@size" /></td> <td><xsl:value-of select="@value" /></td> <td><xsl:value-of select="." /></td> </xsl:if> <xsl:if test="name() = 'space'"> <td colspan="5"><xsl:value-of select="." /></td> </xsl:if> </tr> </xsl:for-each> </tbody> ...
Das sollte helfen, habe es auch getestet.
Eine gute Einführung zum Thema XSL findest du übrigens auf SelfHTML, falls du deine Kenntnisse noch vertiefen möchtest. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage