Announcement

Collapse
No announcement yet.

XML -> XSLT -> HTML Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML -> XSLT -> HTML Tabelle

    Hallo zusammen,

    meine Aufgabe ist es aus einer XML-Datei eine HTML-Tabelle zu erzeugen. Die XML- Datei hat folgende Struktur:
    Code:
    <table>
      <header>
        <column columnnumber="1">Überschrift</column>
        <column columnnumber="2">Überschrift</column>
        ...
      </header>
      <rows>
        <row>
          <entry columnnumber="2">Inhalt der Zelle</entry>
          <entry columnnumber="17">Inhalt der Zelle</entry>
          ...
        </row>
        ...
      </rows>
    </table>
    In dem Header werden die Spaltenüberschriften definiert. Anschließend gibt es für jede Zeile ein <row> Element. Das <row> Element enthält aber nur die gefüllten Zellen! Die Anzahl der gefüllten Zellen ist variabel. Und genau hier liegt mein Problem. Zwar weiß ich wie man generell mit XSLT aus XML-Daten eine Tabelle baut, allerdings nur unter der Bedingung, dass immer alle Zellen in der XML-Datei aufgeführt werden. Hier ist dies eben nicht der Fall. D.h. wenn es ein <entry> Element soll
    Code:
    <td>Inhalt der Zelle</td>
    geschrieben werden, sonst
    Code:
    <td></td>
    Ein möglicher Ansatz wäre es in jedem <row> Element eine doppelte for-each Schleife laufen zu lassen. Die äußere iteriert über alle vorhandenen Spalten, die innere prüft ob es einen Eintrag in der aktuellen Spalte gibt. Nur leider weiß ich nicht wie ich das realisieren soll Daher hoffe ich auch eure Hilfe!

    Gruß

    Moe

  • #2
    Hier ein Beispiel:
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:output method="html" indent="yes"/>
      
      <xsl:template match="table">
        <table>
          <thead>
            <tr>
              <xsl:for-each select="header/column">
                <th><xsl:value-of select="."/></th>
              </xsl:for-each>
            </tr>
          </thead>
          <tbody>
            <xsl:variable name="cols" select="header/column/@columnnumber"/>
            <xsl:for-each select="rows/row">
              <xsl:variable name="row" select="."/>
              <tr>
                <xsl:for-each select="$cols">
                  <td>
                    <xsl:value-of select="$row/entry[@columnnumber = current()]"/>
                  </td>
                </xsl:for-each>
              </tr>
            </xsl:for-each>
          </tbody>
        </table>
      </xsl:template>
    
    </xsl:stylesheet>
    Mit der Beispieleingabe
    Code:
    <table>
      <header>
        <column columnnumber="1">Spalte 1</column>
        <column columnnumber="2">Spalte 2</column>
        <column columnnumber="3">Spalte 3</column>
        <column columnnumber="4">Spalte 4</column>
        <column columnnumber="5">Spalte 5</column>
      </header>
      <rows>
        <row>
          <entry columnnumber="2">1,2</entry>
          <entry columnnumber="4">1,4</entry>
        </row>
      </rows>
    </table>
    ergibt sich das Resultat
    Code:
    <table>
       <thead>
          <tr>
             <th>Spalte 1</th>
             <th>Spalte 2</th>
             <th>Spalte 3</th>
             <th>Spalte 4</th>
             <th>Spalte 5</th>
          </tr>
       </thead>
       <tbody>
          <tr>
             <td></td>
             <td>1,2</td>
             <td></td>
             <td>1,4</td>
             <td></td>
          </tr>
       </tbody>
    </table>

    Comment


    • #3
      Hey ho,

      vielen Dank für das Beispiel. Ich konnte es an meinen Fall anpassen und es funktioniert einwandfrei!

      Gruß

      Moe

      Comment


      • #4
        XML ... Oracle

        Hallo zusammen!

        Bin etwas verzweifelt auf der Suche nach einer Lösung, wie ich die Inhalte einer XML Datei, z.B. wie oben, in eine Oracle Tabelle überführen kann. Sprich der Inhalt eines Elements müsste in eine vorbereitete (?) Tabellenzeile kopiert werden.

        Wie geht das überhaupt?

        Ich arbeite mit dem PL/SQL Developer.

        Vielen Dank!

        Comment


        • #5
          Was sagt denn die Oracle/PL/SQL Dokumentation zum Stichwort "XML Import"? Und unter oracle.com gibt es doch sicher auch Foren zum Thema PL/SQL, wo du eher Leute findest, die sich damit auskennen und weiterhelfen können, als hier in einem Forum zu XSLT.

          Comment


          • #6
            Hallo Martin,

            das ist vollkommen richtig. Leider bin ich wirklich sehr neu, was die Thematik Oracle angeht. Arbeite mich momentan auch durch die Oracle Doku durch.

            Wieso ich trotzdem hier poste:

            Ich habe doch immer wieder festgestellt, dass innerhalb des SQL bzw. PL/SQL Codes auch XSLT eingesetzt werden kann. Ich habe bis jetzt nur nicht feststellen können wie.

            Der andere Grund ist der, dass ich festgestellt habe, dass es gerade hier und in diesem Forum viele engagierte Mitglieder mit einem guten Kenntnisstand gibt. Deine Tipps z.B. sind auch stets sehr hilfreich. Daher habe ich angenommen, dass jemand vielleicht so ein Standardtemplate bereits mal gesehen hätte.

            Im Oracle Forum habe ich die Frage übrigens auch schon gestellt. Bislang keine Resonanz.

            Vielen Dank an dieser Stelle noch einmal!

            Grüße
            Alex

            Comment

            Working...
            X