Announcement

Collapse
No announcement yet.

Fehler durch leere Felder

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

  • Fehler durch leere Felder

    Hallo zusammen,

    in meiner XML-Datei:
    Code:
    <EndStg>
          <abschl>Diplom (FH)</abschl>
          <studieng>Wirtschaftsinformatik</studieng>
          <anfdat>01.09.2000</anfdat>
          <maxendedat>01.03.2005</maxendedat>
          <minstgsem>1</minstgsem>
          <maxstgsem>10</maxstgsem>
          <maxgdex>Beendigung des Studiums nach Abschlussprüfung</maxgdex>
          <semdiff>0</semdiff>
       </EndStg>
       <EndStg>
          <abschl>Diplom (FH)</abschl>
          <studieng>Ingenieurwissenschaften</studieng>
          <anfdat>01.09.2006</anfdat>
          <maxendedat />
          <minstgsem>1</minstgsem>
          <maxstgsem>11</maxstgsem>
          <maxgdex />
          <semdiff>0</semdiff>
       </EndStg>
    gibt es das Feld maxendedat. Genau über diese möchte ich eine Bedingung laufen lassen. Also wenn das Feld leer ist, soll ein anderer Output erscheinen, als wenn das Feld gefüllt ist

    Die Ausgabe funktioniert:

    Code:
    <xsl:for-each select="EndStg">
    
    <fo:block>
    <fo:inline>
    <xsl:value-of disable-output-escaping="no" select="maxendedat"/>
    </fo:inline>
    </fo:block>
    Wenn ich jedoch eine Bedingung mache:
    Code:
    <xsl:if test="maxendedat=''">
    <xsl:text>ist leer (1)</xsl:text>
    </xsl:if>
    
    <xsl:if test="maxendedat = NULL">
    <xsl:text>ist leer (2)</xsl:text>
    </xsl:if>
    greift keine der Bedingungen.

    Habt ihr eine Ahnung?

  • #2
    maxendedat = NULL ist nicht sinnvoll, das testet ja nur, ob das Element "maxendedat" gleich einem Element "NULL" ist, ein Element namens "NULL" gibt es ja gar nicht in deinem XML-Beispiel.
    Der Test maxendedat='' sollte schon funktionieren und funktioniert für mich auch, Beispiel-Dokument
    Code:
    <Wurzel>
    <EndStg>
          <abschl>Diplom (FH)</abschl>
          <studieng>Wirtschaftsinformatik</studieng>
          <anfdat>01.09.2000</anfdat>
          <maxendedat>01.03.2005</maxendedat>
          <minstgsem>1</minstgsem>
          <maxstgsem>10</maxstgsem>
          <maxgdex>Beendigung des Studiums nach Abschlussprüfung</maxgdex>
          <semdiff>0</semdiff>
       </EndStg>
       <EndStg>
          <abschl>Diplom (FH)</abschl>
          <studieng>Ingenieurwissenschaften</studieng>
          <anfdat>01.09.2006</anfdat>
          <maxendedat />
          <minstgsem>1</minstgsem>
          <maxstgsem>11</maxstgsem>
          <maxgdex />
          <semdiff>0</semdiff>
       </EndStg>
    </Wurzel>
    Stylesheet
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
    <xsl:template match="/Wurzel">
      <xsl:for-each select="EndStg">
        <xsl:if test="maxendedat=''">
           <xsl:text>ist leer (1)</xsl:text>
        </xsl:if>
      </xsl:for-each>
    </xsl:template>
    
    </xsl:stylesheet>
    Ausgabe mit Saxon 6.5.5
    ist
    Code:
    ist leer (1)
    also greift die Bedingung einmal.

    Comment


    • #3
      Ansonsten lässt sich noch test="string-length(maxendedat) = 0" prüfen.

      Comment


      • #4
        Vielen Dank, aber langsam zweifle ich an mir selbst!

        Die if-Abfragen haben alle nicht funktioniert, auch die von euch getesteten.

        Nach diversen Versuchen hab ich es mal mit otherwise probiert:

        Code:
        <xsl:choose>
        
        <xsl:when test="string-length(maxendedat) > 1">
        <xsl:text>ist nicht leer</xsl:text>  
        </xsl:when>
        
        <xsl:otherwise>
        <xsl:text>ist leer </xsl:text>
        </xsl:otherwise>
        
        </xsl:choose>
        und siehe da ... es funktioniert

        Comment


        • #5
          XSLT hat keine Probleme mit Abfragen, dann liegt es eher an den Daten und > 1 ist auch nicht sinnvoll, eher > 0, denn = 1 wäre auch nicht leer.

          Comment

          Working...
          X