Zum Inhalt springen
  • 0

XSLT / XPath: Problem mit Darstellung von Wert in HTML Tabelle


Frage

Geschrieben

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.

 

7 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben

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>

image.png.12acf9272dddced93bd35441400357f0.png

 

  • 1
Geschrieben

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.

  • 1
Geschrieben

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> 

 

  • 1
Geschrieben

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>

 

  • 0
Geschrieben

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:

1520671200_Screenshot2019-03-1922_09_28.png.08cd7a632363bba2903ee5dd0c616951.png

richtig wäre es aber so:

69883350_Screenshot2019-03-1922_09_34.png.a2c197494fca5acbcd8e21e1f386b773.png

Ich bin mir sicher das das Problem nicht schwer ist, aber irgendwas übersehe ich hier und mir fällt nicht auf was ?

 

  • 0
Geschrieben
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 ?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...