Hallo,
Ich habe folgendes Problem:
Wie sieht dein XML aus und was ist umgefähr die Ausgabe die du erwartest?
Grüße Thomas
Mein xml sieht folgendermaßen aus, wobei die Tabelle natürlich noch größer sein kann. Die Tabelle bzw. das xml-file wird entsprechend der vorgegebenen Zeilen-Spaltenanzahl generiert (hier jedoch nicht das Problem). Meine xsl-Versuche diesbezüglich habe ich Dir auch noch dazu kopiert (bisher leider fehlerhaft). Die Ausgabe soll lediglich die Elemente entsprechend ihren Bezeichnungen im xml-file (müsste eigentlich selbsterklärend sein) in einer Tabelle darstellen. Bei fester Anzahl Zeilen und Spalten würde ich dies auch ohne weiteres hinbekommen. Aber so gestaltet es sich etwas schwierig:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="TableStyle.xsl" ?> <page> <show_table>true</show_table> <table_columns>5</table_columns> <table_rows>5</table_rows> <table_headline>Headline</table_headline> <table> <tr> <td> <column_format>left</column_format> </td> <td> <column_format>right</column_format> </td> <td> <column_format>left</column_format> </td> <td> <column_format>right</column_format> </td> <td> <column_format>left</column_format> </td> </tr> <tr> <td> <table_header>Headline 1</table_header> </td> <td> <table_header>Headline 2</table_header> </td> <td> <table_header>Headline 3</table_header> </td> <td> <table_header>Headline 4</table_header> </td> <td> <table_header>Headline 5</table_header> </td> </tr> <!-- Zeile 1 --> <tr> <td> <table_element>Element 11</table_element> </td> <td> <table_element>Element 12</table_element> </td> <td> <table_element>Element 13</table_element> </td> <td> <table_element>Element 14</table_element> </td> <td> <table_element>Element 15</table_element> </td> </tr> <!-- Zeile 2 --> <tr> <td> <table_element>Element 21</table_element> </td> <td> <table_element>Element 22</table_element> </td> <td> <table_element>Element 23</table_element> </td> <td> <table_element>Element 24</table_element> </td> <td> <table_element>Element 25</table_element> </td> <!-- Zeile 3 --> </tr> <tr> <td> <table_element>Element 31</table_element> </td> <td> <table_element>Element 32</table_element> </td> <td> <table_element>Element 33</table_element> </td> <td> <table_element>Element 34</table_element> </td> <td> <table_element>Element 35</table_element> </td> </tr> <!-- Zeile 4 --> <tr> <td> <table_element>Element 41</table_element> </td> <td> <table_element>Element 42</table_element> </td> <td> <table_element>Element 43</table_element> </td> <td> <table_element>Element 44</table_element> </td> <td> <table_element>Element 45</table_element> </td> </tr> <!-- Zeile 5 --> <tr> <td> <table_element>Element 51</table_element> </td> <td> <table_element>Element 52</table_element> </td> <td> <table_element>Element 53</table_element> </td> <td> <table_element>Element 54</table_element> </td> <td> <table_element>Element 55</table_element> </td> </tr> </table> </page>
xsl: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <head> <title/> </head> <!-- Einbinden der pi_intranet.css --> <link rel="stylesheet" href="css/style.css" type="text/css" /> <body> <!-- Darstellung der Seitenstruktur --> <xsl:if test="page/show_table = 'true'"> <xsl:apply-templates select="page/table_headline"/> <br /> <xsl:apply-templates select="page/table" /> </xsl:if> </body> </html> </xsl:template>
<!-- Definition der einzelnen Schablonen -->
<!-- Definition der table_headline --> <xsl:template match="table_headline"> <p> <xsl:value-of select="." /> </p> </xsl:template>
<!-- Versuch einer Schleifen-Konstruktion -->
<xsl:template match="table">
<table width="100%" border="1"> <tr> <xsl:call-template name="column_headlines"> <xsl:with-param name="counter1" select="1" /> </xsl:call-template> </tr> <xsl:call-template name="table_construct"> <xsl:with-param name="counter2" select="3" /> </xsl:call-template> </table>
</xsl:template>
<!-- Template, um die Spaltenüberschriften zu definieren --> <xsl:template name="column_headlines"> <xsl:param name="counter1" /> xsl:choose <xsl:when test="$counter1 <= number(../table_columns)"> <td> <xsl:attribute name="align"> <xsl:value-of select="tr[1]/td[$counter1]/column_format" /> </xsl:attribute> <xsl:value-of select="tr[2]/td[$counter1]/table_header"/> </td> <xsl:call-template name="column_headlines"> <xsl:with-param name="counter1" select="$counter1 + 1" /> </xsl:call-template> </xsl:when> xsl:otherwise <xsl:call-template name="Abbruch1" /> </xsl:otherwise> </xsl:choose> </xsl:template>
<!-- Template, um den Tabellenaufbau in Abhängigkeit von der vorgegebenen Zeilenanzahl zu definieren --> <xsl:template name="table_construct"> <xsl:param name="counter2" /> xsl:choose <xsl:when test="$counter2 < (number(../table_rows) + 3)"> <tr> <xsl:call-template name="construct_cols"> <xsl:with-param name="counter2" select="$counter2" /> <xsl:with-param name="counter3" select="1" /> </xsl:call-template> </tr> <xsl:call-template name="table_construct"> <xsl:with-param name="counter2" select="$counter2 + 1" /> </xsl:call-template> </xsl:when> xsl:otherwise <xsl:call-template name="Abbruch2" /> </xsl:otherwise> </xsl:choose> </xsl:template>
<xsl:template name="construct_cols"> <xsl:param name="counter3" /> <xsl:param name="counter2" /> xsl:choose <xsl:when test="$counter3 < number(../table_cols)"> <td> <xsl:attribute name="align"> <xsl:value-of select="tr[1]/td[$counter3]/column_format" /> </xsl:attribute> <xsl:value-of select="tr[$counter2]/td[$counter3]/table_element"/> </td> <xsl:call-template name="construct_cols"> <xsl:with-param name="counter3" select="$counter3 + 1" /> <xsl:with-param name="counter2" select="$counter2" /> </xsl:call-template> </xsl:when> xsl:otherwise <xsl:call-template name="table_construct"> <xsl:with-param name="counter2" select="$counter2 + 1" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>
<xsl:template name="Abbruch1"> xsl:commentSchleife 1 beendet!</xsl:comment> </xsl:template>
<xsl:template name="Abbruch2"> xsl:commentSchleife 2 beendet!</xsl:comment> </xsl:template>
</xsl:stylesheet>