Announcement

Collapse
No announcement yet.

XSLT Problem mit Auslesen der Daten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT Problem mit Auslesen der Daten

    Folgendes Problem stellt sich mir in den Weg. Ich habe eine xml Datei in der Gerätedaten gespeichert werden. Nun habe ich aber auch in manchen Feldern eine Identnummer. Dafür habe ich in der Selben Datei noch einen andren Node der dann die Inhalte für diese Identnummer bereit hält. Zum besseren Verständnis ist hier einmal die xml-Datei:
    Code:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="test.xslt" ?>
    <gerxpdaten>
      <Geraete>
        <Geraet>
          <ger_id>1</ger_id>
          <ger_gkz>20800720</ger_gkz>
          <ger_kkz>20800</ger_kkz>
          <ger_anlid>2</ger_anlid>
        </Geraet>
      </Geraete>
      <Anlagen>
        <Anlage>
          <anl_id>1</anl_id>
          <anl_name>Testanlage</anl_name>
          <anl_desc>Eine Anlage die für Testzwecke angelegt wurde</anl_desc>
        </Anlage>
        <Anlage>
          <anl_id>2</anl_id>
          <anl_name>Testplatz</anl_name>
          <anl_desc>Ein Platz der lokal für Testzwecke eingerichtet wurde</anl_desc>
        </Anlage>
      </Anlagen>
    </gerxpdaten>
    Wie man sieht gibt es im Gereate/Gereat Node immer eine ger_anlid diese ist meine ID für die Inhalte im Anlagen Node bei der jeder Anlage Node eine anl_id enthält.
    Nun habe ich versucht den anl_name zu meinen Gereatedaten in einer Tabelle durch folgende xslt Datei darzustellen:
    Code:
    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:template match="/">
    		<html>
    			<body>
    				<table width="50%" cellspacing="0" cellpadding="0" style="font-family:verdana;font-size:X-Small" border="1">
    					<tr bgcolor="#336699">
    						<th align="left">
    							<font color="White">GKZ</font>
    						</th>
    						<th align="left">
    							<font color="White">KKZ</font>
    						</th>
    						<th align="right">
    							<font color="White">Anl-ID</font>
    						</th>
    						<th align="right">
    							<font color="White">Anlagenname</font>
    						</th>
    					</tr>
    						<xsl:for-each select="gerxpdaten/Geraete/Geraet">
    						<tr>
    							<td align="left">
    								<xsl:value-of select="ger_gkz"/>
    							</td>
    							<td align="left">
    								<xsl:value-of select="ger_kkz"/>
    							</td>
    							<td align="right">
    								<xsl:value-of select="ger_anlid"/>
    							</td>
    							<td align="right">
    								<xsl:call-template name="ans">
    									<xsl:with-param name="temp" select="ger_anlid" />
    								</xsl:call-template>
    							</td>
    						</tr>
    					</xsl:for-each>
    				</table>
    			</body>
    		</html>
    	</xsl:template>
    	<xsl:template name="ans" match="gerxpdaten/Anlagen">
    		<xsl:param name="temp" select="0" />
    		<xsl:for-each select="Anlage">
    			<xsl:if test="anl_id='$temp'">
    				<xsl:value-of select="anl_name" />
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>
    Nun ich habe schon versucht die Anführungszeichen ' und ' um den Parameter wegzulassen aber auch das hat keinen Erfolg

    Ziel ist es also eine Tabelle zu erstellen die so aussieht:
    | GKZ | KKZ | ANL-ID | Anlagenname |
    | ger_gkz | ger_kkz | ger_anlid | anl_name |

    Weiß irgendjemand eine Lösung oder kann man das so wie ich mir das denke garnicht realisieren?
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

  • #2
    Es ist hier kein separates Template nötig, es reicht:
    Code:
    ...
    <td align="right">
      <xsl:variable name="ger_anlid" select="ger_anlid"/>
      <xsl:value-of select="/gerxpdaten/Anlagen/Anlage[anl_id = $ger_anlid]/anl_name"/>
    </td>
    ...
    (Ergänzung) Kürzer wäre noch:
    Code:
    ...
    <td align="right">
      <xsl:value-of select="/gerxpdaten/Anlagen/Anlage[anl_id = current()/ger_anlid]/anl_name"/>
    </td>
    ...
    Zuletzt editiert von Thomas Meinike; 27.08.2008, 11:24.

    Comment


    • #3
      Wow danke, ich habe mich so auf das mit dem Template versteift und nun schon eine ganze Woche gesucht wieso es denn scheitert. Aber deine Möglichkeit ist einfach genial. Hab jetzt sogar beides ausprobiert und funktioniert wunderbar.
      Ich sollte mich einfach noch tiefer in die Materie von XML-Stylesheets einarbeiten, denn ich denke sie wird die Auswertungen unserer Geräte extrem vereinfachen ;-)

      Also nochmals herzlichen Dank!
      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

      Comment

      Working...
      X