Hallo,
ich bins mal wieder mit einem neuen Problem :-)
Da mir bisher hier immer super geholfen wurde, möchte ich es gerne wieder versuchen.
Ich habe ein XML File mit einer Tabelle. Um die Tabelle mit einem XSLT in eine HTML Tabelle zu verwandeln, benutze ich CDATA. Desweiteren sollen aber auch die Attribute der Tabelle und ihrer Spalten an den jeweiligen Stellen mit übergeben werden. Soweit so gut, nur das ich beim auslesen der Attribute der Spalten immer alle Attribute (für alle Spalten einer Tabelle) bekomme und nicht für die einzelne Spalte.
Kann mir da vielleicht bitte wieder jemand helfen?
Hier mein XML Code:
<xhtml:div >
<xhtml: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">
xhtml:colgroup
<xhtml:col style="WIDTH: 179px"/><xhtml:col style="WIDTH: 269px"/><xhtml:col style="WIDTH: 179px"/><xhtml:col style="WIDTH: 268px"/>
</xhtml:colgroup>
xhtml:tbody
xhtml:tr
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">xhtml:div </xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">xhtml:div<xhtml:span nowrap="1"/> </xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">xhtml:divxhtml:strongZeile 1Spalte3</xhtml:strong>
</xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">xhtml:div </xhtml:div></xhtml:td>
</xhtml:tr>
xhtml:tr
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">xhtml:divxhtml:strongZeile2Spalte1</xhtml:strong>
</xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">xhtml:div<xhtml:span nowrap="1"/> </xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupDataStyle">xhtml:divxhtml:strongZeil2Spalte3</xhtml:strong>
</xhtml:div></xhtml:td>
<xhtml:td style="FONT-SIZE: 11px" class="readonlyGroupLabelStyle">xhtml:div </xhtml:div></xhtml:td>
</xhtml:tr>
</xhtml:tbody>
</xhtml:table>
</xhtml:div>xhtml:div
<xhtml: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">
xhtml:colgroup<xhtml:col style="WIDTH: 896px"/></xhtml:colgroup>
xhtml:tbody
xhtml:tr
<xhtml:td style="BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none">
xhtml:div
<xhtml: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">
xhtml:colgroup<xhtml:col style="WIDTH: 136px"/><xhtml:col style="WIDTH: 758px"/></xhtml:colgroup>
xhtml:tbody
xhtml:tr
<xhtml:td bgColor="#006400"><xhtml:font color="#ffffff">xhtml:strongneue TabelleZeile1Spalte1</xhtml:strong></xhtml:font></xhtml:td>
<xhtml:td bgColor="#006400"><xhtml:font color="#ffffff">xhtml:strongneue Tabelle Zeile1Spalte2</xhtml:strong></xhtml:font></xhtml:td>
</xhtml:tr>
</xhtml:tbody>
</xhtml:table>
</xhtml:div>
</xhtml:td>
</xhtml:tr>
</xhtml:tbody>
</xhtml:table>
</xhtml:div>
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='.' />"
</xsl:for-each>
</xsl:variable>
<html>
<![CDATA[<table ]]>
<xsl:value-of select="$tablestring"/>
<![CDATA[> ]]>
<xsl:apply-templates mode="body"/>
<![CDATA[</table>]]><![CDATA[ <br/> ]]>
</html>
</xsl:template>
<xsl:template match="*" mode="body">
<![CDATA[<tbody> ]]><xsl:apply-templates mode="Zeile"/><![CDATA[</tbody> ]]>
</xsl:template>
<xsl:template match="*" mode="Zeile" >
<xsl:for-each select="./xhtml:tr">
<![CDATA[<tr> ]]><xsl:apply-templates mode="Spalte"/><![CDATA[</tr> ]]>
</xsl:for-each>
</xsl:template>
<xsl:template match="*" mode="Spalte" >
<xsl:variable name="columnstring">
<xsl:for-each select="../xhtml:td/@*">
<xsl:value-of select='name()' />="<xsl:value-of select='.' />"
</xsl:for-each>
</xsl:variable>
<![CDATA[<td ]]>
<xsl:value-of select="$columnstring" />
<![CDATA[> ]]>
xsl:choose
<xsl:when test="count(./xhtml:div/xhtml:table) = 1">
<xsl:apply-templates select="*[xhtml:table]"></xsl:apply-templates>
</xsl:when>
xsl:otherwise
<xsl:value-of select="xhtml:td/@*"/><xsl:copy-of select="*"/>
</xsl:otherwise>
</xsl:choose>
<![CDATA[</td> ]]>
</xsl:template>
Vielleicht kann man den XSLT Code auch wieder vereinfachen (ich glaube ich denke manchmal etwas zu kompliziert)
gruß
Joy