Thoralf: Formatierte Anzeige

Hallo,

Also eins vorweg, ich bin so ziemlicher Neuling was XML anbelangt.
Folgendes *.xml-File möchte ich zur Anzeige bringen:

<?xml version="1.0"?>
<?xml-stylesheet href="ausgabe.xsl" type="text/xsl" ?>
<!DOCTYPE Importfile [
 <!ELEMENT Importfile (Table*)>
 <!ELEMENT Table (TableName, Records)>
 <!ELEMENT Records (Record*)>
 <!ELEMENT Record (Fields)>
 <!ELEMENT Fields (Field*)>
 <!ELEMENT Field (FieldName, FieldValue)>
 <!ELEMENT FieldName (#PCDATA)>
 <!ELEMENT FieldValue (#PCDATA)>
 <!ELEMENT TableName (#PCDATA)>
]>
<Importfile>
  <Table>
    <TableName>Tabellenkopf</TableName>
    <Records>
      <Record>
       <Fields>
         <Field>
           <FieldName>Zelle_1</FieldName>
           <FieldValue>Zelle_2</FieldValue>
           <FieldName>Zelle_1</FieldName>
           <FieldValue>Zelle_2</FieldValue>
         </Field>
       </Fields>
     </Record>
   </Records>
  </Table>
  <Table>
    <TableName>Tabellenkopf</TableName>
    <Records>
      <Record>
       <Fields>
         <Field>
           <FieldName>Zelle_1</FieldName>
           <FieldValue>Zelle_2</FieldValue>
           <FieldName>Zelle_1</FieldName>
           <FieldValue>Zelle_2</FieldValue>
         </Field>
       </Fields>
     </Record>
   </Records>
 </Table>
   .
   .
   .
</Importfile>

Das ganze soll dann in etwa so aussehen:

Tabellenkopf
    Zelle_1          Zelle_2

Tabellenkopf
    Zelle_1          Zelle_2

usw.

Kann mir da diesbezügleich jemand ne Starthilfe geben?
Das was ich da bisher so zurechtgecodet habe scheint nich so recht zu funktionieren :)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
xsl:template
<xsl:for-each select="Importfile/Table/Records/Record/Fields/Field">
<TABLE STYLE="border:1px; border-style:solid; border-color:#000000; width:400px">
<TR>
<TD STYLE="column-span:2;">
<xsl:value-of select="TableName" />
</TD>
</TR>
<TR>
<TD STYLE="font-family:Verdana; font-size:9pt; font-weight:bold; width:50%;">
<xsl:value-of select="FieldName" />
</TD>
<TD STYLE="font-family:Verdana; font-size:9pt;">
<xsl:value-of select="FieldValue" />
</TD>
</TR>
</TABLE>
<BR />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Für Eure Hilfe wär ich sehr dankbar

MfG Thoralf (Dolphi)

  1. Hallo,

    Das ganze soll dann in etwa so aussehen:

    Tabellenkopf
        Zelle_1          Zelle_2

    Tabellenkopf
        Zelle_1          Zelle_2

    usw.

    Kann mir da diesbezügleich jemand ne Starthilfe geben?
    Das was ich da bisher so zurechtgecodet habe scheint nich so recht zu funktionieren :)

    Probiere es mal so:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <!-- das ist der veraltete Namespace des MSXML 2.x-Parsers - installiere besser Version 3 oder 4
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> -->

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

    <xsl:output
        method="html"
        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
        doctype-system="http://www.w3.org/TR/html401/loose.dtd"
        encoding="ISO-8859-1"
        version="1.0"
        indent="yes"
    />

    <xsl:template match="/">

    <HTML>
    <HEAD>
    <TITLE>Test</TITLE>
    </HEAD>
    <BODY>

    <xsl:for-each select="Importfile/Table">
    <TABLE STYLE="border:1px; border-style:solid; border-color:#000000; width:400px">
    <TR>
    <TD STYLE="column-span:2;">
    <xsl:value-of select="TableName" />
    </TD>
    </TR>
    <TR>
    <TD STYLE="font-family:Verdana; font-size:9pt; font-weight:bold; width:50%;">
    <xsl:value-of select="Records/Record/Fields/Field/FieldName" />
    </TD>
    <TD STYLE="font-family:Verdana; font-size:9pt;">
    <xsl:value-of select="Records/Record/Fields/Field/FieldValue" />
    </TD>
    </TR>
    </TABLE>
    <BR />
    </xsl:for-each>

    </BODY>
    </HTML>

    </xsl:template>
    </xsl:stylesheet>

    Als Ergebnis habe ich diesen HTML-Code erhalten:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
    <HTML>
      <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <TITLE>Test</TITLE>
      </HEAD>
      <BODY>
        <TABLE STYLE="border:1px; border-style:solid; border-color:#000000; width:400px">
          <TR>
            <TD STYLE="column-span:2;">Tabellenkopf</TD>
          </TR>
          <TR>
            <TD STYLE="font-family:Verdana; font-size:9pt; font-weight:bold; width:50%;">Zelle_1</TD>
            <TD STYLE="font-family:Verdana; font-size:9pt;">Zelle_2</TD>
          </TR>
        </TABLE>
        <BR>
        <TABLE STYLE="border:1px; border-style:solid; border-color:#000000; width:400px">
          <TR>
            <TD STYLE="column-span:2;">Tabellenkopf</TD>
          </TR>
          <TR>
            <TD STYLE="font-family:Verdana; font-size:9pt; font-weight:bold; width:50%;">Zelle_1</TD>
            <TD STYLE="font-family:Verdana; font-size:9pt;">Zelle_2</TD>
          </TR>
        </TABLE>
        <BR>
      </BODY>
    </HTML>

    MfG, Thomas

    1. Hallo Thomas,

      hm scheinbar hab ich hier nen schwerwiegendes Problem.
      Bei mir wird gar kein HTML-Code erzeugt, sondern als Quelltext bekomme ich das *.xml-File angezeigt.

      Und zur Ansicht kommt bei mir im IE 6.0 unter WinXP nur der Tabellenkopf.

      MfG Thoralf

      1. Hallo,

        hm scheinbar hab ich hier nen schwerwiegendes Problem.
        Bei mir wird gar kein HTML-Code erzeugt, sondern als Quelltext bekomme ich das *.xml-File angezeigt.

        Der IE transformiert intern und zeigt die HTML-Ansicht, aber in der Quellcodeansicht ist nach wie vor XML-Code zu sehen.

        Transformiere Dein Dokument alternativ mit "Instant SAXON", http://sourceforge.net/projects/saxon:

        Aufruf in einer DOS-Box:
        saxon -o ausgabe.html datei.xml datei.xsl
        oder
        saxon datei.xml datei.xsl > ausgabe.html

        Oder probiere mal dieses Upload-Formular, welches die Dateien zur Transformation an den Sablotron-Prozessor uebergibt. Dann wird auch der generierte HTML-Code angezeigt:
        http://ktd.et.fh-merseburg.de/~tm/PHP/xslt/

        Und zur Ansicht kommt bei mir im IE 6.0 unter WinXP nur der Tabellenkopf.

        Das deutet auf eine alte MSXML-Version hin (vermutlich 2.5). Der IE 6 sollte eigentlich den 3er mitbringen und beim Testen mit diesem unter IE 5.5 und 6.0 hat das bei mir auch funktioniert.

        MfG, Thomas

  2. Hallo Thoralf,

    <TD STYLE="column-span:2;">

    ist zwar nett, aber noch nicht wirklich zu empfehlen.
    a) ist nur in der http://www.w3.org/TR/css3-multicol/ vorhanden,
    b) welche browser kennen es? (Dein IE6 kennst es auch nicht)

    --
    für den fall, dass du mehr als 2 zellen pro zeile hast:
    ----------
    <?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>

    <xsl:for-each select="Importfile/Table">
    <xsl:variable name="columns" select="count(Records/Record/Fields/Field/FieldName)" />
    <TABLE STYLE="border:1px; border-style:solid; border-color:#000000; width:400px">
    <TR>
    <TD align="center" colspan="{$columns}">
    <xsl:value-of select="TableName" />
    </TD>
    </TR>
    <!-- ab hier wie schon Thomas gespostet hatte -->
    <TR>
    <TD STYLE="font-family:Verdana; font-size:9pt; font-weight:bold; width:50%;">
    <xsl:value-of select="Records/Record/Fields/Field/FieldName" />
    </TD>
    <TD STYLE="font-family:Verdana; font-size:9pt;">
    <xsl:value-of select="Records/Record/Fields/Field/FieldValue" />
    </TD>
    </TR>

    </TABLE>
    </xsl:for-each>
    <BR />
     </body>
     </html>
    </xsl:template>
    </xsl:stylesheet>

    -------------

    Grüße
    Thomas