ThomasM: PHP transformToXml funktioniert nicht mehr. Debugging-Tips

Beitrag lesen

Hallo Andreas,

Ich habe das Ganze auf http://www.xsltcake.com/ getestet. Auch hier erhalte ich als Ergebnis einen leeren XML-String : <gigs></gigs>. Ohne irgendwelche Fehlermeldungen. Deshalb tu ich mich schwer, bzw. ist es für mich nahezu unmöglich das Script zu debuggen.

Deshalb meine Frage an euch, ob jemand den Fehler erkennt, oder mir Tipps zum Debuggen von XSL geben kann?

Vermutlich soll es so ablaufen:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  <xsl:template match="/">  
    <gigs>  
      <xsl:for-each select="gigs/gig/date">  
        <!-- Sort Gigs by Date -->  
        <xsl:sort data-type="number" select="substring(.,7,4)"/>  
        <xsl:sort data-type="number" select="substring(.,4,2)"/>  
        <xsl:sort data-type="number" select="substring(.,1,2)"/>  
        <!-- Display only feature gigs -->  
        <xsl:variable name="isodate"  
                      select="concat(substring(.,7,4),substring(.,4,2),substring(.,1,2))"/>  
        <xsl:if test="$isodate > ancestor::gigs/refdate">  
          <gig>  
            <title>  
              <xsl:value-of select="parent::gig/title"/>  
            </title>  
            <id>  
              <xsl:value-of select="parent::gig/id"/>  
            </id>  
            <imgurl>  
              <xsl:value-of select="parent::gig/imgurl"/>  
            </imgurl>  
            <date>  
              <xsl:value-of select="."/>  
            </date>  
            <time>  
              <xsl:value-of select="parent::gig/time"/>  
            </time>  
            <where>  
              <xsl:value-of select="parent::gig/where"/>  
            </where>  
            <privat>  
              <xsl:value-of select="parent::gig/privat"/>  
            </privat>  
            <hp>  
              <xsl:value-of select="parent::gig/hp"/>  
            </hp>  
          </gig>  
        </xsl:if>  
      </xsl:for-each>  
    </gigs>  
  </xsl:template>  
</xsl:stylesheet>

Wesentliche Probleme waren:

  • Variable falsch befüllt
  • xsl:sort kann nicht mit xsl:sort verschachtelt werden

Allerdings kommt noch kein Output zustande, weil die gig-Datumswerte kleiner als der Referenzwert sind. Dieser kleiner-Vergleich wäre zielführender:

<xsl:if test="$isodate &gt; ancestor::gigs/refdate">
  <!-- … -->
</xsl:if>

Hinweis: Durch mehrere xsl:template-Konstrukte plus xsl:apply-templates ließe sich der Code besser strukturieren, die Nutzung der Achsenbezeichner könnte auch vermieden werden.

Grüße,
Thomas