Rondra: Enkelkind Elemente überprüfen

Hallo liebes Forum!

Ich hab folgende XML. Das ganze soll in HTML eine Auflistung darstellen. So eine Art Baumstruktur.

<elems>
    <elem selected="false">
      <elem selected="false">
         <elem selected="true"/>
      </elem>
    </elem>
 </elems>

bekomme es einfach nicht hin, dass das erste Element merkt, dass eins seiner Kinder/Enkelkinder das spezielle Attribut selected=true hat.
Mein ziel ist es, das erste element in einer anderen Farbe darzustellen, wenn eins seiner Kinder/Enkel/Urenkel das Attribut selected=true hat. Mit folgendem Code erkennt nur der Vater des betreffenden Kindes das Attribut, nicht jedoch der Großvater oder der Urgroßvater!

<xsl:when test="*/@selected='true'">yes</xsl:when>

Geht das nicht?

Dazu muss ich noch sagen, dass die Struktur der XML dynamisch generiert wird. Es können also zigbeliebige Verschachtelungen sprich Ur-ur-Enkel vorkommen... das macht die sache ja so kompliziert.. *seufz*

Danke Danke Danke im Voraus!!!
Rondra

  1. Hi Rondra,

    Mein ziel ist es, das erste element in einer anderen Farbe darzustellen, wenn eins seiner Kinder/Enkel/Urenkel das Attribut selected=true hat. Mit folgendem Code erkennt nur der Vater des betreffenden Kindes das Attribut, nicht jedoch der Großvater oder der Urgroßvater!

    <xsl:when test="*/@selected='true'">yes</xsl:when>

    Geht das nicht?

    Klar:
    <xsl:for-each select="MeinElement[.//@MeinAttribut='true']>
    ...mach was mit dem Punkt
    </xsl:for-each>

    Dazu muss ich noch sagen, dass die Struktur der XML dynamisch generiert wird. Es können also zigbeliebige Verschachtelungen sprich Ur-ur-Enkel vorkommen... das macht die sache ja so kompliziert.. *seufz*

    Ohne den Doppel-Schrägen wärs wirklich kompliziert

    Utzi

    1. Hallo Andreas und Utzi,

      JAU das klappt so, danke vielmals!!!!

      *freu*
      lg
      Rondra

  2. Hi,

    Mein ziel ist es, das erste element in einer anderen Farbe darzustellen, wenn eins seiner Kinder/Enkel/Urenkel das Attribut selected=true hat. Mit folgendem Code erkennt nur der Vater des betreffenden Kindes das Attribut, nicht jedoch der Großvater oder der Urgroßvater!
    <xsl:when test="*/@selected='true'">yes</xsl:when>

    Du suchst Kinder/Enkel/Urenkel/..., also Nachfahren, englisch: descendants
    Also
    descendant::

    Wenn es egal ist, welchen Elementnamen diese Nachfahren haben:
    *
    zusammen:

    descendant::*

    Diese Nachfahren sollen eine Bedingung erfüllen, also [Bedingung]:

    descendant::*[Bedingung]

    Die Bedingung ist, daß das selected-Attribut 'true' sein soll, also @selected='true'

    Insgesamt also:

    test="descendant::*[@selected='true']"

    Nachzulesen in http://www.w3.org/TR/xpath

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/