Manfred: Tricky XSLT

Hi!

Ich habe ein XML, mit einer Menge a-Elemente,
welche über eine ID auf b-elemente verweisen,
welche weitere Daten zum a-Element haben.

Bsp.:

<test>
<a id="1">
 <ref id="2">
</a>
<b refid="2" name="hallo welt!" />
</test>

Ich möchte nun alle Attribute jedes a-Elementes ausgeben -
auch diese, die in ein dazugehöriges b-Element ausgelagert wurden.

Das folgende funzt leider nicht, weil ./@id sich in diesem
Fall ja bereits auf die ID des gefundenen b-Elements beziehen würde.

<xsl:for-each select="a">
<xsl:value-of select="//b[@refid = ./@id]/name" />
</xsl:for-each>

Somit würden hier alle b-Elemente gefunden werden, bei denen die refid gleich wie die id ist.
Ich brauche also irgendwie ein Schlüsselwort, welches mir
den aktuellen Knoten aus der for-each-Schleife gibt.

Danke und lG
Manfred

  1. Hi,

    Ich habe ein XML, mit einer Menge a-Elemente,
    welche über eine ID auf b-elemente verweisen,

    Haben diese in der DTD den Typ ID?

    Und die Verweise haben in der DTD den Typ IDREF bzw. IDREFS?

    <a id="1">

    Dann wäre es sinnvoll, auch korrekte IDs zu benutzen. Nummern sind keine korrekten IDs.

    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. Hi Andreas!

      Ich bin jetzt etwas weitergekommen. Ich kann die XSLT-Funktion "id" verwenden, um auf ein Element mit einer Bestimmten ID zuzugreifen (http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#id)
      Alternativ dazu kann ich die XSLT-Funktion "key()" verwenden, um auf ein beliebiges Element zuzugreifen, welches einen bestimmten Wert hat.

      Das löst mein Problem, drängt mir aber eine weitere Frage auf:
      key() funktioniert laut SELFHTML nur, wenn man alle Elemente haben möchte, die einen bestimmten Wert haben, z. B. alle a-Elemente, für die gilt: id="ABCDIEKATZELIGHTIMSCHNEE". Was aber, wenn man die gesuchten Elemente aufgrund von mehreren Eigenschaften einschränken möchte, z. B. alle a-Elemente für die gilt: id1="ABCDIEKATZELIGHTIMSCHNEE" sowie id2="RIRARUUNDDRAUSBISDU" ?

      Gibt's hierzu eine Lösung oder muss man das irgendwie händisch machen ?

      lG Manfred

      1. Hallo,

        Ich bin jetzt etwas weitergekommen. Ich kann die XSLT-Funktion "id" verwenden, um auf ein Element mit einer Bestimmten ID zuzugreifen (http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#id)
        Alternativ dazu kann ich die XSLT-Funktion "key()" verwenden, um auf ein beliebiges Element zuzugreifen, welches einen bestimmten Wert hat.

        http://aktuell.de.selfhtml.org/tippstricks/xml/gruppierung1/index.htm

        Das löst mein Problem, drängt mir aber eine weitere Frage auf:
        key() funktioniert laut SELFHTML nur, wenn man alle Elemente haben möchte, die einen bestimmten Wert haben, z. B. alle a-Elemente, für die gilt: id="ABCDIEKATZELIGHTIMSCHNEE". Was aber, wenn man die gesuchten Elemente aufgrund von mehreren Eigenschaften einschränken möchte, z. B. alle a-Elemente für die gilt: id1="ABCDIEKATZELIGHTIMSCHNEE" sowie id2="RIRARUUNDDRAUSBISDU" ?

        Gibt's hierzu eine Lösung oder muss man das irgendwie händisch machen ?

        z.B.
        key match="*[@id ='ABCD'] | *[@id = 'EFG']" use="."

        oder du erstellst zwei keys und verwendest diese dann für die Ausgabe.

        Grüße
        Thomas