Veröffentlicht 19. März 20196 j Hallo Leute, ich versuch mich gerade mal wieder etwas mit XSLT auseinander zu setzen und hab eigentlich ein einfaches Beispiel, nur scheinbar denk ich zu kompliziert und mir fällt einfach nicht ein was ich falsch mache. Folgendes Szenario: Ich habe ein XML das in etwa so aussieht: <root> <elemente> <element> <id>1</id> </element> <element> <id>2</id> </element> </elemente> <testfälle> <testfall> <tid>1</tid> <beschreibung>hshgoasn</beschreibung> </testfall> <testfall> <tid>2</tid> <beschreibung>dhfoashgfon</beschreibung> </testfall> </testfälle> </root> nun möchte ich das ganze in einer HTML Tabelle über ein XSLT ausgeben: <table width="100%"> <tr> <th>ID</th> <th>Bezeichnung</th> </tr> <xsl:for-each select="/root/elemente/element"> <tr> <td><xsl:value-of select="id"/></td> <td><xsl:value-of select="/root/testfälle/testfall/bezeichnung"/></td> <!-- soll nur die Beschreibung ausgeben bei der die "tid" identisch mit der "id" ist --> </tr> </xsl:for-each> </table> Das ist jetzt sehr einfach runtergebrochen. Mein Problem ist das ich mir zwar die Beschreibungen ausgeben lassen kann, jedoch beide Beschreibungen für die entsprechenden tid zusammen ausgegeben werden. Ich habe verschiedenste XPath ausdrücke probiert, aber irgendwie bekomme ich es nicht hin das ich pro Zeile nur die Beschreibung für die entsprechende "ID" in dieser Zeile bekomme. Vielleicht kennt sich hier ja einer mit XSLT aus und kann mir da nen Tipp geben wie ich den XPath Ausdruck formulieren muss das ich nur das ausgegeben bekomme das ich haben will.
19. März 20196 j Moin, <xsl:value-of select="/root/testfälle/testfall[./tid=id]/bezeichnung"/> In die Richtung müsste das gehen. Ich bin mir gerade nicht sicher ob es wirklich "id" oder eher "./id" ist. Jedenfalls kommt in die eckigen Klammern die Suche. "in Root -> in Testfälle -> der Testfall, bei dem das untergeordnete Blatt tid der id entspricht" //root/testfalle/testfall[./tid=1]/beschreibung Würde also die Beschreibung vom ersten Testfall selektieren.
19. März 20196 j Autor Hi PVoss, danke für die Antwort, das hatte ich tatsächlich auch schon Probiert zusätzlich auch in folgender Form: /root/testfälle/testfall[tid=//id]/bezeichnung das Problem dann wird mir das ganze in der Tabelle so angezeigt: richtig wäre es aber so: Ich bin mir sicher das das Problem nicht schwer ist, aber irgendwas übersehe ich hier und mir fällt nicht auf was ?
19. März 20196 j Keine Ahnung ob das eleganter geht, aber mit ner xsl variablen kann man es zumindest machen <xsl:variable name="elementId"><xsl:value-of select="id"/></xsl:variable> <td><xsl:value-of select="/root/testfalle/testfall[tid=$elementId]/beschreibung" /></td>
19. März 20196 j Autor vor 3 Minuten schrieb _n4p_: Keine Ahnung ob das eleganter geht, aber mit ner xsl variablen kann man es zumindest machen Stimmt mit einer Variable ist es etwas eleganter, werd ich mal einbauen ?? Leider löst das mein Problem noch nicht ?
19. März 20196 j also ich bekomme dann diesen output <html> <body> <table width="100%"> <tr> <th>ID</th> <th>Bezeichnung</th> </tr> <tr> <td>1</td> <td>hshgoasn</td> </tr> <tr> <td>2</td> <td>dhfoashgfon</td> </tr> </table> </body> </html>
19. März 20196 j Lösung Jop, hab auch ein bisschen ausprobiert und man braucht wohl leider eine Variable. <?xml version='1.0' encoding='UTF-8'?> <?xml-stylesheet type="text/xsl" href="xsltest.xsl"?> <root> <elemente> <element> <id>1</id> </element> <element> <id>2</id> </element> </elemente> <testfälle> <testfall> <tid>1</tid> <beschreibung>hshgoasn</beschreibung> </testfall> <testfall> <tid>2</tid> <beschreibung>dhfoashgfon</beschreibung> </testfall> </testfälle> </root> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:for-each select="./root/elemente/element"> <xsl:variable name="elemtId" select="./id" /> ID: <xsl:value-of select="./id"/> Beschreibung: <xsl:value-of select="//testfälle/testfall[./tid=$elemtId]/beschreibung"/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
19. März 20196 j Autor HA tatsächlich! ich hatte die Variable wohl an der Falschen Stelle definiert. VIELEN DANK euch beiden! jetzt kann ich in Ruhe schlafen xD
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.