andi123: Knoten auf "leer", "nicht vorhanden" & "keine Attribute" testen

Hallo,

ich möchte ein XML per XSLT transformieren.

Wie kann ich prüfen, ob ein Knoten

  • nicht vorhanden ist,
  • leer ist (also keine Childs hat) und
  • keine Attribute hat?

Man kommt bei dem Test auf Childs und Attribute mit
<xsl:if test="string-length(childName)"/>
bzw.
<xsl:if test="string-length(@attributeName)"/>
weiter, nur habe ich das Problem, dass Knoten bist zu 20 Childs haben können bzw. bis zu fünf Attribute, mit relativ langen Bezeichnern.

Da müsste ich ja eine ewig lange (also auch vom Tippen her) if-Abfrage bauen?!

Gibt es evtl. einen direkteren Befehl in XSLT um die Tests durchzuführen?

Habe noch <xsl:if test="count(childName) &gt; 0"/> gefunden, aber auch da müsste ich ja auf jeden der 20 childNames testen.

Vielen Dank,
Andreas

  1. Hi

    mittels XPath sollte das gehen:

    • nicht vorhanden ist,

    <xsl:if test="//nodename"/>
    sucht im ganzen Baum nach dem Knoten "nodename".
    Der Test schlägt fehl wenn der Knoten nicht da ist.

    • leer ist (also keine Childs hat) und

    <xsl:if test="child::*"/>
    child::* liefert alle Kinder des aktuellen Knotens
    Der Test schlägt daher fehl wenn keine Kinder da sind.

    • keine Attribute hat?

    <xsl:if test="@*"/>
    @* liefert alle Attribute des aktuellen Knotens
    Der Test schlägt daher fehl wenn keine Attribute da sind.

    PS: ohne gew(e|ä)hr... also ungetestet
    PPS: hier gibts ne XPath Einführung: http://www.w3schools.com/Xpath/

    greetz,
    eeye

    1. DANKE!!!!!!!

      Werd ich ausprobieren.

      Wünsche ein schönes Wochenende!