hh: Tabelle umwandeln

Beitrag lesen

Hallo,

ich muss eine Umwandlung tätigen. Bevor ich aber anfange, wollte ich mal kurz um Meinung fragen, wie ihr daran gehen würdet, vielleicht hat ja schon einer sich damit beschäftigt (und das Rad wuerde nicht neu erfunden werden) zum anderen vielleicht auch einen guten Tipp fürs Vorgehen. Ich will keine Komplettlösung (versteht sich wohl ;-), aber vielleicht einen Tipp, wie man es elegant lösen koennte.
Also mir liegt eine Tabelle vor, die XHTML konform ist (ich kann sie aber auch als OpenXML darstellen, das Problem bleibt das Gleiche). In der Tabelle gibt es mehrere Überschriften, die gekennzeichnet sind mit einem 'h' in der zweiten Zelle der Tabellenreihe. Darunter liegen dann die Datenreihen mit einer Elementbezeichnung und den Werten für die jeweiligen Perioden (die Periode steht in der Überschrift in der Spalte der Wertspalte). Die Perioden sind aber nicht in jeder Überschrift gleich. Ich moechte nun mit xsl eine umwandlung, dass ich dann in der neuen XML ein Element habe, welches die Bezeichnung trägt, den Wert sowie die entsprechende Periode. Klingt kompliziert, ist aber etwas anschaulicher mit Beispiel, deshalb anbei die XHTMl Datei.

Als Ergbnis moechte ich nun alle Element ohne Überschrift beispielhaft haben:
.
<Element3 balance="credit" wert="650000" periode="20X1" currency="euro"/>
<Element3 balance="credit" wert="300000" periode="20X2" currency="dollar"/>
<Element3 balance="credit" wert="nr" periode="20X3" currency="euro"/>
.
<Element9 balance="credit" wert="350000" period="20Y1" currency="euro"/>
<Element9 balance="credit" wert="300000" period="20W2" currency="dollar"/>
.
Meine Hauptfragen wäre, mit welcher XPATH Abfrage komme ich von der aktuellen Tabellenreihe in die entsprechend übergeordnete Reihe mit der Überschrift, um mir die Periode zu besorgen, sowie den Währungstype, der auch in der Überschrift steht? Und dann muesste ich ja auch noch eine Art Schleife ziehen, um alle vorhanden Perioden abzufragen (wobei alle Perioden, die möglich sind, in einem knoten liegen unter time/periode/@periodevalue). Wie gesagt, vielleicht hat ja einer so etwas schon gemacht oder weiss einen Link hierfür.

Hier die HTML (ist aber xhml konform):

<html xmlns:fo="http://www.w3.org/1999/XSL/Format">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   </head>
   <body>
    <table border="1">
        <tr bgcolor="#EEE0FF">
            <td >1</td>
            <td >h</td>
            <td >-</td>
            <td >Bezeichnung</td>
            <td >balance</td>
            <td >20X1</td>
            <td >test</td>
            <td >euro</td>
            <td >20X2</td>
            <td >test</td>
            <td >dollar</td>
            <td >20X3</td>
            <td >test</td>
            <td >euro</td>
         </tr>
         <tr bgcolor="#A3ACFF">
            <td >2</td>
            <td >0</td>
            <td >root</td>
            <td>Element1</td>
            <td >credit</td>
            <td >11415000</td>
            <td >11415000</td>
            <td >ok</td>
            <td >14090000</td>
            <td >14090000</td>
            <td >ok</td>
            <td >nr</td>
            <td >nr</td>
            <td >ok</td>
         </tr>
         <tr bgcolor="#CEDFFB">
            <td >3</td>
            <td >1</td>
            <td >1</td>
            <td >Element2</td>
            <td >credit</td>
            <td >11415000</td>
            <td >11415000</td>
            <td >ok</td>
            <td >14090000</td>
            <td >14090000</td>
            <td >ok</td>
            <td >nr</td>
            <td >nr</td>
            <td >ok</td>
         </tr>
         <tr bgcolor="#DEECFF">
            <td >4</td>
            <td >2</td>
            <td >1</td>
            <td >Element3</td>
            <td >credit</td>
            <td >650000</td>
            <td >650000</td>
            <td >ok</td>
            <td >300000</td>
            <td >300000</td>
            <td >ok</td>
            <td >nr</td>
            <td >nr</td>
            <td >ok</td>
         </tr>
         <tr bgcolor="#EEE0FF">
            <td >1</td>
            <td >h</td>
            <td >-</td>
            <td >Bezeichnung</td>
            <td >balance</td>
            <td >20Y1</td>
            <td >test</td>

<td >euro</td>
            <td >20W2</td>
            <td >test</td>
            <td >dollar</td>
         </tr>
         <tr bgcolor="#DEECFF">
            <td >4</td>
            <td >2</td>
            <td >1</td>
            <td >Element8</td>
            <td >credit</td>
            <td >650000</td>
            <td >650000</td>
            <td >ok</td>
            <td >300000</td>
            <td >300000</td>
            <td >ok</td>
         </tr>
         <tr bgcolor="#CCCCCC">
            <td >5</td>
            <td >3</td>
            <td >1</td>
            <td >Element9</td>
            <td >credit</td>
            <td >350000</td>
            <td >350000</td>
            <td >ok</td>
            <td >300000</td>
            <td >300000</td>
            <td >ok</td>
         </tr>
         <tr bgcolor="#CCCCCC">
            <td >6</td>
            <td >3</td>
            <td >2</td>
            <td >Element4</td>
            <td >credit</td>
            <td >300000</td>
            <td >300000</td>
            <td >ok</td>
            <td >0</td>
            <td >0</td>
            <td >ok</td>
         </tr>
       </table>
 </body>
</html>

Gruß