kostenloser Webspace werbefrei: lima-city


[XML]Formatierung über XSL

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    ichbinlooper

    ichbinlooper hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    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>
  4. Autor dieses Themas

    ichbinlooper

    ichbinlooper hat kostenlosen Webspace.

    Danke für den Hinweis, aber nein, daran liegt es nicht.

    Es müsste theoretisch daran liegen, dass ich erst foreach die <adress> tags auslese und dann erst die <space> tags. Allerdings weiß ich nicht, wie ich es sonst lösen kann.
  5. ...
    <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.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!