Announcement

Collapse
No announcement yet.

Filter etc. in XSLT

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

  • Filter etc. in XSLT

    Hallo Leute,

    ich bin ziemlich neu in XSLT. Ich habe die Aufgabe bekommen für folgendes XML-Dokument eine XSL Transf. in HTML zu machen um eine Tabelle zu bekommen.

    XML-Dok:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE auto SYSTEM "/Users/hf/Documents/Studium/7. Semester/Adv. MuMe/dok1.dtd">
    <auto>
        <marke>Ford</marke>
        <modell>Galaxy</modell>
        <baujahr>1997</baujahr>
        <reparaturen>
            <reparatur datum="17.1.2004" kmstand="104.000">Austausch Thermostat
                <kosten WRG="EUR">189,00</kosten>
            </reparatur>
            <reparatur datum="21.10.2004" kmstand="111.111">TÜV Abnahme
                <kosten>231,00</kosten>
            </reparatur>
        </reparaturen>
    </auto>
    XSLT:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
        
    <xsl:template match="auto">
        <xsl:text>Auto: </xsl:text><xsl:value-of select="marke"/><xsl:text> </xsl:text><xsl:value-of select="modell"/>
        <table>
            <tr>
                <th><xsl:text>Datum</xsl:text></th>
                <th><xsl:text>Kilometerstand</xsl:text></th>
                <th><xsl:text>Reparaturgegenstand</xsl:text></th>
                <th><xsl:text>Kosten</xsl:text></th>
            </tr>
           <xsl:for-each select="reparaturen/reparatur">
            <tr>
                <td><xsl:value-of select="@datum"/></td>
                <td><xsl:value-of select="@kmstand"/></td>
                <td><xsl:value-of select="kosten"/><xsl:text> EUR</xsl:text></td>
                <td><xsl:value-of select="self::node()"/></td>
            </tr>
           </xsl:for-each>
            
        </table>
        
        
    </xsl:template>
    </xsl:stylesheet>
    Nun klappt das ganze soweit und ich bekomme auch eine Tabelle:

    Code:
    Auto: Ford Galaxy<table>
       <tr>
          <th>Datum</th>
          <th>Kilometerstand</th>
          <th>Reparaturgegenstand</th>
          <th>Kosten</th>
       </tr>
       <tr>
          <td>17.1.2004</td>
          <td>104.000</td>
          <td>189,00 EUR</td>
          <td>Austausch Thermostat
                         189,00
                     
          </td>
       </tr>
       <tr>
          <td>21.10.2004</td>
          <td>111.111</td>
          <td>231,00 EUR</td>
          <td>T&Uuml;V Abnahme
                         231,00
                     
          </td>
       </tr>
    </table>
    aber beim Reparaturgegenstand wird auch der Kosten-Knoten bzw. dessen Inhalt ausgegeben. Gibt es eine Möglichkeit das zu verhindern. Wenn nein, dann muss das XML-Dokument geändert werden. Wenn ja, wäre es nett wenn es mir einer verraten würde .

    Vielen Dank schon mal.

    mfg,

    henryf

  • #2
    Definiere besser ein separates Element "reparaturgegenstand" und werte dieses aus.

    Ändere alternativ die Reihenfolge (erst Textknoten, dann kosten-Element):

    Code:
    <tr>
      <td><xsl:value-of select="@datum"/></td>
      <td><xsl:value-of select="@kmstand"/></td>
      <td><xsl:value-of select="normalize-space(text())"/></td>
      <td><xsl:value-of select="kosten"/><xsl:text> EUR</xsl:text></td>
    </tr>
    BTW: Die normalize-space()-Funktion dient nur zur (kosmetischen) Korrektur der in der td-Ausgabe nicht benötigten Zeilenumbrüche.

    Comment

    Working...
    X