Thomas Meinike: xml-daten dynamisch in html einbinden

Beitrag lesen

Hallo,

danke erstmal für deine antwort. also eigentlich soll immer der gesamte inhalt angezeigt werden.

also die feldbezeichnung und dann jeweils der feldinhalt. das problem ist für mich, dass ich bisher nicht einmal weiss, wie ich die xml-datei in der html-seite einbinde,bzw. aufrufe, bzw die einzelnen zeilen und felder anspreche. dazu lässt sich die hilfe nicht aus. was xsl ist, werde ich jetzt erst einmal nachlesen.

Ich habe mal fuer Deine XML-Struktur eine Transformationsvorlage erstellt (XML zur besseren Lesbarkeit nur anders formatiert + Stylesheet-Zeile):

daten.xml

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet version="1.0" href="daten.xsl" type="text/xsl"?>

<DATAPACKET Version="2.0">

<METADATA>
<FIELDS>
<FIELD attrname="Field1" fieldtype="string" WIDTH="15"/>
<FIELD attrname="Field2" fieldtype="string" WIDTH="15"/>
<FIELD attrname="Field3" fieldtype="string" WIDTH="15"/>
<FIELD attrname="Field4" fieldtype="string" WIDTH="15"/>
</FIELDS>
<PARAMS CHANGE_LOG="1 0 4 2 1 8 3 0 4"/>
</METADATA>

<ROWDATA>
<ROW RowState="5" Field1="fjkgf" Field2="ewf" Field3="wef" Field4="wef"/>
<ROW RowState="12" Field1="ef" Field2="ewf" Field3="wef" Field4="wef"/>
<ROW RowState="4" Field1="ef" Field2="ef" Field3="g" Field4="g"/>
</ROWDATA>

</DATAPACKET>

daten.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- by TM 04/02 -->

<xsl:output
    method="html"
    doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
    encoding="ISO-8859-1"
    version="1.0"
    indent="yes"
/>

<xsl:template match="DATAPACKET">

<html>
<head>
<title>DATAPACKET</title>
</head>
<body bgcolor="#FFFFCC" text="#0000CC">

<xsl:apply-templates />

</body>
</html>
</xsl:template>

<xsl:template match="METADATA">
  <h1>METADATA</h1>
  <table border="1" summary="METADATA">
    <tr>
      <th>attrname</th><th>fieldtype</th><th>WIDTH</th>
    </tr>
  <xsl:apply-templates />
  </table><br />
</xsl:template>

<xsl:template match="FIELDS/FIELD">
  <xsl:for-each select=".">
    <tr>
      <td><xsl:value-of select="@attrname" /></td>
      <td><xsl:value-of select="@fieldtype" /></td>
      <td><xsl:value-of select="@WIDTH" /></td>
    </tr>
  </xsl:for-each>
</xsl:template>

<xsl:template match="PARAMS">
  <tr>
    <td colspan="3"><STRONG>PARAMS:</STRONG> <xsl:value-of select="@CHANGE_LOG" /></td>
  </tr>
</xsl:template>

<xsl:template match="ROWDATA">
  <h1>ROWDATA</h1>
  <table border="1" summary="ROWDATA">
    <tr>
      <th>RowState</th><th>Field1</th><th>Field2</th><th>Field3</th><th>Field4</th>
    </tr>
  <xsl:apply-templates />
  </table><br />
</xsl:template>

<xsl:template match="ROW">
  <xsl:for-each select=".">
    <tr>
      <td><xsl:value-of select="@RowState" /></td>
      <td><xsl:value-of select="@Field1" /></td>
      <td><xsl:value-of select="@Field2" /></td>
      <td><xsl:value-of select="@Field3" /></td>
      <td><xsl:value-of select="@Field4" /></td>
    </tr>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

Nun kannst Du mal diese beiden Dateien speichern und an den genannten Ort hochladen. Alternativ kannst Du die daten.xml in den IE mit MSXML-Parser ab 3 laden und die HTML-Ausgabe wird offline generiert. Die Zeile mit <?xml-stylesheet ...?> wird nur in letzterem Fall gebraucht, stoert aber beim Hochladen nicht.

Lies Dich auf jeden Fall in die Themen XML und XSLT ein. Das sind spannende Technologien, was ich auch immer im Unterricht sage, aber eben nicht primaer spannend im Sinne von Klickibunti und alles dreht sich ... ;-).

MfG, Thomas