Elemente auslesen
Fabi
- xsl
0 Thomas J.S.
Hallo,
ich habe ein Problem bei meiner xsl-Transformation. Und zwar weiß ich nicht genau wie ich mich auf die zwei Unterelemente (Kommentar mit dem Inhalt 1, und Kommentar mit dem Inhalt Änderung HDM) beziehen soll:
...
<RowData>
<ResultTextData>
<StdText/>
<Kommentar>1</Kommentar>
</ResultTextData>
<ResultTextData>
<StdText />
<Kommentar>Änderung HDM</Kommentar>
</ResultTextData>
</RowData>
...
Ich will eine zweispaltige Tabelle in html ausgeben
mein xslt:
...
<xsl:template match=".../.../RowData/ResultTextData">
<tr>
<td>
<xsl:apply-templates select ="Kommentar"/>
</td>
<td>
<xsl:apply-templates select ="Kommentar"/>
</td>
</tr>
Aber so bekomme ich jedesmal jeweils eine 1 in der ersten Zeile in beiden Spalten und den Text Änderung HDM in der zweiten Zeile auch in beiden Spalten.
Dabei sollen sie in einer Zeile nebeneinander (1 in der ersten und der Text in der zweiten Spalte) ausgegeben werden.
Kann mir jmd. sagen was ich ändern muss?
Gruss
Hallo,
<RowData>
<ResultTextData>
<StdText/>
<Kommentar>1</Kommentar>
</ResultTextData>
<ResultTextData>
<StdText />
<Kommentar>Änderung HDM</Kommentar>
</ResultTextData>
</RowData>
...Ich will eine zweispaltige Tabelle in html ausgeben
mein xslt:
...
<xsl:template match=".../.../RowData/ResultTextData">
was ist das: ^^^^^^^^^^ ?
<xsl:template match="RowData/ResultTextData">
<tr>
<td>
<xsl:apply-templates select ="Kommentar"/>
</td>
<td>
<xsl:apply-templates select ="Kommentar"/>
</td>
</tr>
Aber so bekomme ich jedesmal jeweils eine 1 in der ersten Zeile in beiden Spalten und den Text Änderung HDM in der zweiten Zeile auch in beiden Spalten.
Klein wenig verwirrt?
Du hast also:
S1: Spalte 1 / Z1: Zeile 1
S2: Spalte 2 / Z2: Zeile 2
-------------------
| | |
| 1 | 1 |
| S1:Z1 | S2:Z1 |
-------------------
| | |
| HDM | HDM |
| S1:Z2 | S2:Z2 |
-------------------
Das ist soweit absolut korrekt vom XSLT.
Das Template Trifft auf jede "ResultTextData", d.h. es wird für jede ResultTextData eine <tr> erzeugt. Dann Ruft du das Template für Kommentar auf,das gilt natürlich für das "Kommentar"-Element _im_ aktuellen ResultTextData, deshalb hast du es zwei mal stehen (du ruft es ja auch zwei mal auf).
Dabei sollen sie in einer Zeile nebeneinander (1 in der ersten und der Text in der zweiten Spalte) ausgegeben werden.
Also willst du:
-------------------
| | |
| 1 | HDM |
| S1:Z1 | S2:Z1 |
-------------------
Kann mir jmd. sagen was ich ändern muss?
<xsl:template match="RowData">
<tr>
<xsl:for-each select="ResultTextData">
<td>
<xsl:apply-templates select="Kommentar" />
</td>
</xsl:for-each>
</tr>
</xsl:template>
Grüße
Thomas
Hallo Thomas,
vielen Dank für deine Antwort und für die Hilfe!
<xsl:template match=".../.../RowData/ResultTextData">
was ist das: ^^^^^^^^^^ ?
Sorry, das sollte heißen:
<xsl:template match="TabListForSerialize/Tabelle[_Id='IT']/RowData//Kommentar
wobei ich glaube dass das nicht korrekt ist, denn IT ist der Inhalt von _Id. Oder?
Hier die dazugehörende xml-Datei (Teilweise)
<TabListForSerialize>
<Tabelle>
<_Id>IT</_Id>
<RowData>
...
</RowData>
<Kennung>IT</Kennung>
</Tabelle>
<Tabelle>
<_Id>PT</_Id>
<RowData>
...
</RowData>
<Kennung>PT</Kennung>
</Tabelle>
</TabListForSerialize>
Klein wenig verwirrt?
ja, allerdings bin noch nicht so fit in xml mit xslt .
Also willst du:
| | |
| 1 | HDM |
| S1:Z1 | S2:Z1 |
Genau, so soll es hinterher aussehen. Natürlich mit mehreren Zeilen.
Gruss
Fabi
Danke nochmal für den Tipp! Super, so klappt es auch mit der ersten Tabelle.
Ist doch richtig mit Tabelle[_Id='IT'] ;-)
Was muss ich aber noch tun damit er nur die Zeilen (RowDatas) ausliest die einen Inhalt haben? Also die Elemente die keinen Inhalt enthalten sollen auch nicht in der Ausgabeseite in der Tabelle ausgegeben werden.
Gruss
Fabi
Hallo,
Danke nochmal für den Tipp! Super, so klappt es auch mit der ersten Tabelle.
Gerne ;-)
Ist doch richtig mit Tabelle[_Id='IT'] ;-)
Ja.
Was muss ich aber noch tun damit er nur die Zeilen (RowDatas) ausliest die einen Inhalt haben? Also die Elemente die keinen Inhalt enthalten sollen auch nicht in der Ausgabeseite in der Tabelle ausgegeben werden.
Heisst das, dass es auch <RowData></RowData> (bzw.<RowData/>) geben kann?
Wenn ja:
<xsl:template match="RowData[child::*]"> welches nur dann gilt, wenn <RowData> Kindelemente hat.
Grüße
Thomas