dennis88: XML in HTML-Tabelle

Hallo,
ich habe noch nicht soo viel mit XML und XSLT zu tun gehabt, mich aber in den letzten Tagen mal etwas eingelesen...

nun sitze ich aber vor einen Problem und zwar bekomme ich soeine XML-Ausgabe

<report>  
<reporttitle/>  
<reportdate>29.06.2009</reportdate>  
<reportheader/>  
<!-- block ID=36853--><issue><fields>  
<field fieldname="ID:">36853</field>  
<field fieldname="Type:">General-Task</field>  
<field fieldname="Summary:">test b</field>  
<field fieldname="State:">MISTAKE</field>  
<field fieldname="Assigned User:">Testuser, X (X)</field>  
<field fieldname="Project:">/sv_test</field>  
</fields>  
</issue>

und draus möchte ich eine einfache HTML Tabelle machen á la:

<table border="1">  
  <tr>  
    <th>ID</th>  
    <th>Type</th>  
    <th>Summary</th>  
    <th>State</th>  
    <th>Assigned User</th>  
    <th>Prjoect</th>  
  </tr>  
  <tr>  
   <td>hier die ganzen Werte für die Felder...</td>  
  </tr>

und das sind meine bisherigen Versuche:

<?xml version="1.0"?>  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
version="1.0">  
<xsl:template match="/">  
<html>  
<head><title>MKS-Report</title></head>  
<body>  
<table border="1">  
  <tr>  
    <th>ID</th>  
    <th>Type</th>  
    <th>Summary</th>  
    <th>State</th>  
    <th>Assigned User</th>  
    <th>Prjoect</th>  
  </tr>  
  <xsl:for-each select="/fields">  
    <tr>  
      <xsl:template match="issue">  
      <xsl:apply-templates/>  
      </xsl:template>  
    </tr>  
    </xsl:for-each>  
</table>  
</body>  
</html>  
</xsl:template>  
</xsl:stylesheet>  

damit klatscht der mir aber nur den gesamten Inhalt des XML-Dokuemnts über die Tabelle :( ich weiß nicht mehr weiter, bin schon am verzweifeln hier... wäre schön wenn mir jemand mal n Ansatz geben könnte wie ich auf die ganzen fieldname zugreifen kann

Danke im Voraus!!

  1. Moin,

    versuch's mal folgendermaßen ...

    <xsl:for-each select="/issue/fields">  
      <tr>  
        <td><xsl:value-of select="field[@fieldname = 'ID:'           ]"/></td>  
        <td><xsl:value-of select="field[@fieldname = 'Type:'         ]"/></td>  
        <td><xsl:value-of select="field[@fieldname = 'Summary:'      ]"/></td>  
        <td><xsl:value-of select="field[@fieldname = 'State:'        ]"/></td>  
        <td><xsl:value-of select="field[@fieldname = 'Assigned User:']"/></td>  
        <td><xsl:value-of select="field[@fieldname = 'Project:'      ]"/></td>  
      </tr>  
    </xsl:for-each>
    
    1. Moin,

      versuch's mal folgendermaßen ...

      <xsl:for-each select="/issue/fields">

      <tr>
          <td><xsl:value-of select="field[@fieldname = 'ID:'           ]"/></td>
          <td><xsl:value-of select="field[@fieldname = 'Type:'         ]"/></td>
          <td><xsl:value-of select="field[@fieldname = 'Summary:'      ]"/></td>
          <td><xsl:value-of select="field[@fieldname = 'State:'        ]"/></td>
          <td><xsl:value-of select="field[@fieldname = 'Assigned User:']"/></td>
          <td><xsl:value-of select="field[@fieldname = 'Project:'      ]"/></td>
        </tr>
      </xsl:for-each>

      
      >   
        
        
      danke für die fixe Antwort, aber das klappt noch nciht ganz...  
        
      ich habe jetz das XSLT:  
        
      ~~~xml
      <table border ="1">  
        <tr>  
          <th>ID</th>  
          <th>Type</th>  
          <th>Summary</th>  
          <th>State</th>  
          <th>Assaigned User</th>  
          <th>Project</th>  
        </tr>  
        
      <xsl:for-each select="/issue/fields">  
        <tr>  
          <td><xsl:value-of select="field[@fieldname = 'ID:'           ]"/></td>  
          <td><xsl:value-of select="field[@fieldname = 'Type:'         ]"/></td>  
          <td><xsl:value-of select="field[@fieldname = 'Summary:'      ]"/></td>  
          <td><xsl:value-of select="field[@fieldname = 'State:'        ]"/></td>  
          <td><xsl:value-of select="field[@fieldname = 'Assigned User:']"/></td>  
          <td><xsl:value-of select="field[@fieldname = 'Project:'      ]"/></td>  
        </tr>  
      </xsl:for-each>  
        
      </table>
      

      und bekomme das HTML:

      <table border="1">  
      <tr>  
      <th>ID</th><th>Type</th><th>Summary</th><th>State</th><th>Assaigned User</th><th>Project</th>  
      </tr>  
      </table>
      
      1. Danke sehr, habe das Problem nun gelöst!

  2. Hallo dennis88,

    wäre schön wenn mir jemand mal n Ansatz geben könnte wie ich auf die ganzen fieldname zugreifen kann

    Achte auf die XPath-Hierarchie. Probiere diesen Ansatz:

    <xsl:template match="report">  
      <html>  
        <head><title>MKS-Report</title></head>  
        <body>  
          <table border="1">  
            <tr>  
              <th>ID</th>  
              <th>Type</th>  
              <th>Summary</th>  
              <th>State</th>  
              <th>Assigned User</th>  
              <th>Prjoect</th>  
            </tr>  
            <tr>  
              <xsl:for-each select="issue/fields/field">  
                <td><xsl:value-of select="."/></td>  
              </xsl:for-each>  
            </tr>  
          </table>  
        </body>  
      </html>  
    </xsl:template>
    

    Grüße,
    Thomas

    1. Super, danke! Die Antwort hat mir geholfen.

      Gruß

      Hallo dennis88,

      wäre schön wenn mir jemand mal n Ansatz geben könnte wie ich auf die ganzen fieldname zugreifen kann

      Achte auf die XPath-Hierarchie. Probiere diesen Ansatz:

      <xsl:template match="report">

      <html>
          <head><title>MKS-Report</title></head>
          <body>
            <table border="1">
              <tr>
                <th>ID</th>
                <th>Type</th>
                <th>Summary</th>
                <th>State</th>
                <th>Assigned User</th>
                <th>Prjoect</th>
              </tr>
              <tr>
                <xsl:for-each select="issue/fields/field">
                  <td><xsl:value-of select="."/></td>
                </xsl:for-each>
              </tr>
            </table>
          </body>
        </html>
      </xsl:template>

      
      >   
      > Grüße,  
      > Thomas