Lukas: XSL - Abfrage, ob Attribut vorhanden ist

Hallo,

schonmal vorweg, ich habe FAST keine Ahnung von XSL. Ich lese eine XML-Datei aus, nun sind nicht immer alle Attribute in der XML enthalten (meine nicht die Werte). Kann sein, dass ich die XML mal mit paar weniger oder paar mehr Attributen haben. In der XSL stehen aber alle drin. Wie kann ich eine Abfrage machen, dass wenn ein Attribut nicht vorhanden ist, der auch nicht angezeigt wird. Bsp:

<xsl:if 'dieser Attribut vorhanden'> oder <xsl:if test="@Attribut!=''">
ANZEIGEN
</xsl:if>

Natürlich ist der 'Kot' oben falsch.

Danke schonmal!!!

Lukas

  1. Hi,
    sollte so aussehen:

    <xsl:if test="@attr1 | @attr2">
       LALA
    </xsl:if>

    Bedenke, das Du für dieses Beispiel auf dem Knoten stehen musst. (Ein umschließendes XSL-Statement hat den Knoten mit Select ausgewählt) Ansonsten mußt Du den kompletten XPath zu den Attributen angeben.

    Cheers
    Sascha

    1. Danke für die Antwort, das habe ich aber schon leider ausprobiert:

      <xsl:if test="@Dateiname">
        <td><h3>Dateiname</h3></td>
      </xsl:if>

      <xsl:if test="@Titel">
        <td><h3>Titel</h3></td>
      </xsl:if>
      .
      .
      .

      Dateiname ist nicht vorhanden und wird auch nicht angezeigt, Titel ist aber vorhanden, zwar ohne Wert, aber das spielt kein Rolle, und wird ebenfalls nicht angezeigt. Die Attribute die existieren (wie Titel) sollen angezeigt werden, auch wenn das Feld am Ende leer ist.

      Trotzdem Danke

      Hi,
      sollte so aussehen:

      <xsl:if test="@attr1 | @attr2">
         LALA
      </xsl:if>

      Bedenke, das Du für dieses Beispiel auf dem Knoten stehen musst. (Ein umschließendes XSL-Statement hat den Knoten mit Select ausgewählt) Ansonsten mußt Du den kompletten XPath zu den Attributen angeben.

      Cheers
      Sascha

      1. Hi
        versuch mal folgendes

        <xsl:if test="@Titel | @Titel==''">
           <td><h3>Titel</h3></td>
        </xsl:if>

        Bin mir gerade nicht sicher ob = oder == ... probiers mal aus.

        Cheers
        Sascha

        Danke für die Antwort, das habe ich aber schon leider ausprobiert:

        <xsl:if test="@Dateiname">
          <td><h3>Dateiname</h3></td>
        </xsl:if>

        <xsl:if test="@Titel">
          <td><h3>Titel</h3></td>
        </xsl:if>

        1. Danke für die Antwort!!!

          Hab ich auch schon gemacht:
                  <xsl:if test="@Dateiname | @Dateiname=''">
            <td>
              <h3>Dateiname</h3>
            </td>
          </xsl:if>

          <xsl:if test="@Titel | @Titel=''">
            <td>
              <h3>Titel</h3>
            </td>
          </xsl:if>

          Titel und Dateiname werden dann garnicht angezeigt, habe es auch mit != ausprobiert, mit <xsl:if test="@Dateiname!=''"> usw.

          Ich weiß nicht mehr weiter. Wenn nötig, dann bin ich auch bereit die xsl und xml per email zu zuschicken.

          Hi
          versuch mal folgendes

          <xsl:if test="@Titel | @Titel==''">
             <td><h3>Titel</h3></td>
          </xsl:if>

          Bin mir gerade nicht sicher ob = oder == ... probiers mal aus.

          Cheers
          Sascha

          1. Hi,

            <xsl:if test="@Dateiname | @Dateiname=''">

            Der logische Operator für Oder ist in XPath
            or
            , nicht
            |

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Danke, aber es klappt immernoch nicht. :-(

              Gruß

              Lukas

              1. Hallo,

                Danke, aber es klappt immernoch nicht. :-(

                Was klappt nicht?
                Gebe bitte auch das rundherum deines XSLs bekannt, wenn es mit
                <xsl:if test="@Dateiname and @Dateiname != ''">
                  <td>
                    <h3>Dateiname</h3>
                  </td>
                </xsl:if>
                <xsl:if test="@Titel and @Titel != ''">
                  <td>
                    <h3>Titel</h3>
                  </td>
                </xsl:if>

                Es ist aus deiner Beschreibung auch nicht ganz klar, was nun passieren soll.
                Wenn das Attribut nicht vorhanden ist soll nichst (d.h. keine Tabellenzelle?) erzeugt/angezegigt werden.
                Wenn das Attribut vorhanden aber leer ist?

                Grüße
                Thomas

  2. Hallo Lukas,

    hast du es schon mal mit der Abfrage "nicht vorhanden" im choose versucht? Im Prinzip so (vorsicht, ich konnte nicht testen):

    xsl:choose
    <xsl:when test='!@title'>
    </xsl:when>
    xsl:otherwise
    Anzeigen
    </xsl:otherwise>
    </xsl:choose>

    Gruß Mia