SHT16freak: Mit XSL zwei Tabellen in XML vergleichen

Beitrag lesen

Hallo zusammen

Ich bin newcomer im Sachen XML/XSL und komm bei meinem Problem hier nicht weiter. Ich hoffe Ihr könnt mir bei meinem Problem helfen.

Ich habe eine XML-Datei mit zwei Tabellen. Das XML (MBeans.xml) ist sehr simpel aufgebaut: ~~~xml <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="MBeans.xsl"?>

<modul name="jboss.web">
  <mbean name="jboss.web">
    <attribut1 name="trustStoreType">test</attribut1>
    <attribut2 name="port">8080</attribut2>
    <attribut3 name="redirectPort">8443</attribut3>
    <attribut4 name="maxHttpHeaderSize">8192</attribut4>

</mbean>

<mbean2 name="jboss.web">
    <attribut1 name="trustStoreType">null</attribut1>
    <attribut2 name="port">8080</attribut2>
    <attribut3 name="redirectPort">8443</attribut3>
    <attribut4 name="maxHttpHeaderSize">8192</attribut4>

</mbean2>
</modul>

  
Mit meiner XSL-Datei hab ich es mal hingekriegt, dass ich beide Tabellen angezeigt bekomme. Die beiden Tabellen in der XML-Datei sind gleich aufgebaut, auch die Reihenfolge der Attribute sind gleich. Nur hab ich es geschafft die beiden Tabellen untereinander zu setzen.  
  
XSL-Datei (MBeans.xsl):  
  
~~~xml
<?xml version="1.0"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:output method="html" encoding="ISO-8859-1"/>  
    <xsl:template match="/">  
      <html>  
	<head>  
	  <title>MBeans</title>  
	  <style type="text/css" media="screen">  
          table {  
		background-color: lightblue;  
		margin: 1em;  
		padding: 1em;  
		border: 1px black  
		}  
          caption {  
		font-size: large;  
		background-color: lightblue;  
		border-bottom: 3px black }  
		tr:nth-of-type(even) {  
   	        background-color:#ccc;  
 		}  
         caption2 {  
		font-size: large;  
		background-color: lightblue;  
		border-bottom: 3px black }  
		tr:nth-of-type(even) {  
   	        background-color:#ccc;  
 		}  
         </style>  
      </head>  
  
  <body bgcolor="#ffffff">  
    <table width="180" border="1" cellspacing="2" cellpadding="0">  
	     <caption><b>MBeans</b> "jboss.web:type=Connector,port=8080,address=%2F10.5.44.21"</caption>  
	     <xsl:call-template name="tabelle"/>  
	  </table>  
	  <table width="180" border="1" cellspacing="2" cellpadding="0">  
	     <caption2><b>MBeans2</b> "jboss.web:type=Connector,port=8080,address=%2F10.5.44.21"</caption2>  
	     <xsl:call-template name="tabelle2"/>  
	  </table>  
	</body>  
      </html>  
    </xsl:template>  
  
  
    <xsl:template name="tabelle">  
	<xsl:for-each select="//mbean[1]/*">  
	  <tr>  
	     <td>  
		<xsl:value-of select="@name"/>  
	     </td>  
      	     <td>  
		<xsl:value-of select="current()"/>  
	     </td>  
	     <td>  
		<xsl name="tabelle2">  
		<xsl select="//mbean2[1]/*">  
		<xsl:value-of select="current()"/>  
		</xsl>  
		</xsl>  
	     </td>  
	  </tr>  
	</xsl:for-each>  
      </xsl:template>  
		  
    <xsl:template name="tabelle2">  
	<xsl:for-each select="//mbean2[1]/*">  
	   <tr>  
	      <td>  
		 <xsl:value-of select="@name"/>  
	      </td>  
      	      <td>  
		 <xsl:value-of select="current()"/>  
	      </td>  
	   </tr>  
         </xsl:for-each>  
      </xsl:template>			  
   </xsl:stylesheet>

Ich habe versucht die zweite Tabelle unter dem ersten xsl:template zu öffnen. Es zeigt mir eine weitere Spalte an, genau dort wo ich diese eigentlich haben möchte. Das Problem ist nur, dass es mir trotzdem noch die Werte der ersten Tabelle übernimmt. Ausserdem kann ich das zweite xsl:template nicht löschen, weil es sonst nicht Wohlgeformt ist.

Mein Ziel ist es nun eine Tabelle mit drei Spalten zu erzeugen, wo links die Attributnamen stehen und in der mitte und rechts meine beiden Tabellen sind. Es soll zum vergleich dienen.

Ich wäre sehr froh wenn mir jemand helfen kann oder mir eine gute Internetseite empfehlen könnte.

Danke schon im Voraus.

Freundliche Grüsse

SHT16freak ;-)