Jump to content
  • 0
Melde dich an, um diesem Inhalt zu folgen  

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

Frage

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.

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

7 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

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

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 1

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 1

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> 

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 1

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>

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 0

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 🤔

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 0
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 😕

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung