Thomas J.S.: Tabellenattribute auslesen

Beitrag lesen

Hallo,

Um die Tabelle mit einem XSLT in eine HTML Tabelle zu verwandeln, benutze ich CDATA.

Warum das?

Und mein XSLT Code
<xsl:template match="xhtml:div[xhtml:table]">
   <xsl:variable name="tablestring">
                 <xsl:for-each select="xhtml:table/@*">
                  <xsl:value-of select='name()' />="<xsl:value-of select='.' />"

Hier wäre statt die value-ofs ein <xsl:copy-of select"." /> einfacher

</xsl:for-each>
            </xsl:variable>
           <html>

Entweder gibt es in dem XML nur ein xhtml:div als Root-Element und nur eine xhtml:table (was definitiv nicht der fall ist) oder du erzeugst für jede Tabelle ein <html> Element, was im Enddokument eigentlich nicht so gut ist[tm].

<![CDATA[<table ]]>
                <xsl:value-of select="$tablestring"/>
               <![CDATA[> ]]>

Ah du heiliger Bimbam! ;-) Was machst du denn da?

<xsl:template match="*" mode="body">
<xsl:template match="*" mode="Zeile" >
  <xsl:template match="*" mode="Spalte" >

Du weisst schon, dass du hiermit immer für alle Elemente im Dokument diese Templates definiert, ganz egal was sie sind und wo sie stehen?
Schon das <xsl:apply-templates mode="body"/> wird eine Ausgabe erzeugen, dass jenseits von gut unud böse ist.

Vielleicht kann man den XSLT Code auch wieder vereinfachen (ich glaube ich denke manchmal etwas zu kompliziert)

Ich weiss nicht genu was du erreichen möchtest, aber wenn du nur die Tabellen in HTML (ohne den Namesraumprfix) in der Ausgabe haben willst:
------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml" version="1.0">
 <xsl:template match="data">
  <html>
   <head>
    <title />
   </head>
   <body>
    <xsl:apply-templates />
   </body>
  </html>
 </xsl:template>
 <xsl:template match="xhtml:div">
  <div>
   <xsl:apply-templates />
  </div>
 </xsl:template>
 <xsl:template match="xhtml:div[xhtml:table]">
  <xsl:apply-templates />
 </xsl:template>
 <xsl:template match="xhtml:table | xhtml:table//*[(namespace-uri(.) = 'http://www.w3.org/1999/xhtml') and (not(local-name(.) = 'div'))]">
  <xsl:element name="{local-name(.)}">
   <xsl:for-each select="@*">
    <xsl:attribute name="{local-name(.)}">
     <xsl:value-of select="." />
    </xsl:attribute>
   </xsl:for-each>
   <xsl:apply-templates />
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>
----------------------------------------

<data> habe ich jetzt für mein Test als Root-Element für das XML genommen.
<data xmlns:xhtml="http://www.w3.org/1999/xhtml">
xhtml:div
...

Die Ausgabe der Transformation ist:

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

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title></title>
   </head>
   <body>

<table class="dataTableStyle msoUcTable" style="TABLE-LAYOUT: fixed; WIDTH: 895px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" tabIndex="-1" borderColor="#c0c0c0" cellPadding="0" width="100%" border="1">

<colgroup>

<col style="WIDTH: 179px">

<col style="WIDTH: 269px">
            <col style="WIDTH: 179px">
            <col style="WIDTH: 268px">

</colgroup>

<tbody>

<tr>

<td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">
                  <div> </div>

</td>

<td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">
                  <div><span nowrap="1"></span>
                  </div>
               </td>

<td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">
                  <div><strong>Zeile 1Spalte3</strong>

</div>
               </td>

<td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">
                  <div> </div>
               </td>

</tr>

<tr>

<td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">
                  <div><strong>Zeile2Spalte1</strong>

</div>

</td>

<td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">
                  <div><span nowrap="1"></span>
                  </div>
               </td>

<td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">
                  <div><strong>Zeil2Spalte3</strong>

</div>
               </td>

<td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">
                  <div> </div>
               </td>

</tr>

</tbody>

</table>

<table class="msoUcTable" style="TABLE-LAYOUT: fixed; WIDTH: 896px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" tabIndex="-1" cellPadding="0" width="100%" border="1">

<colgroup>

<col style="WIDTH: 896px">
         </colgroup>

<tbody>

<tr>

<td style="BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none">

<table class="msoUcTable" style="TABLE-LAYOUT: fixed; WIDTH: 894px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" tabIndex="-1" cellPadding="0" width="100%" border="1">

<colgroup>
                        <col style="WIDTH: 136px">
                        <col style="WIDTH: 758px">

</colgroup>

<tbody>

<tr>

<td bgColor="#006400"><font color="#ffffff"><strong>neue TabelleZeile1Spalte1</strong></font></td>

<td bgColor="#006400"><font color="#ffffff"><strong>neue Tabelle Zeile1Spalte2</strong></font></td>

</tr>

</tbody>

</table>

</td>

</tr>

</tbody>

</table>

</body>
</html>

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

Grüße
Thomas