xml xsl Unterknoten

Grafixboy

Erfahrenes Mitglied
Hallo all ihr wohlgeformten Programmierer :)

Ich habe hier mal ein vereinfachtes Beispiel meines Problems aufbereitet.
[IMG="http://s2.directupload.net/images/091219/ikk5bb8e.jpg"/]
So sieht das Ergebnis aus : [URL="http://s2.directupload.net/images/091219/ikk5bb8e.jpg"]Link[/URL]
Wie kann ich es realisieren das er mir auch die weiteren Unterknoten anzeigt und nicht nur den ersten ?
(In diesem Fall das Untermenü 'Alle')

XML Dokument:
Code:
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="xsldoc.xsl"?>
<menue>
	<hm type="hmp">
		<bname>Home</bname>
                <um>
			<bname>Home</bname>
		</um>
	</hm>
	<hm type="hmp">
		<bname>News</bname>
		<um type="ump">
			<bname>Neuste</bname>
		</um>
		<um type="ump">
			<bname>Alle</bname>
			<end>txt</end>
		</um>
	</hm>
	<hm type="hmp">
		<bname>Chat</bname>
		<um type="ump">
			<bname>Room1</bname>
		</um>
		<um type="ump">
			<bname>Room1</bname>
		</um>
        </hm>
</menue>

XSL (xslDoc.xsl)
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <body style="font-family:Arial;font-size:12pt;">
<div style="width:160px; margin-left:100px;background-color:#DDDDDD;padding:4px">
    <xsl:for-each select="menue/hm">
      <div style="background-color:teal;color:white;padding:4px">
        <span style="font-weight:bold"><xsl:value-of select="bname"/></span>
      </div>
      <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
      <xsl:value-of select="end"/><br />
         
          <span style="font-weight:bold"><xsl:value-of select="um/bname"/></span>
       
      </div>
    </xsl:for-each>
</div>
  </body>
</html>

Kann es sein das ich dies über ein template zu meiner Lösung komme und wenn ja wie muss dies aussehen ?

Danke im vorraus für Eure Hilfe
 
... Kann es sein das ich dies über ein template zu meiner Lösung komme und wenn ja wie muss dies aussehen ?
Ja, genau so wie es in jedem Tutorial steht:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output
  method="html"
  indent="yes"
  encoding="UTF-8"
  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
  doctype-system="http://www.w3.org/TR/html4/loose.dtd"
/>

<xsl:template match="/">
  <html>
    <head>
      <title>Test</title>
    </head>
    <body>
      <ul>
        <xsl:apply-templates/>
      </ul>
    </body>
  </html>
</xsl:template>

<xsl:template match="hm">
  <li>
    <xsl:value-of select="bname"/>
    <xsl:apply-templates select="um"/>
  </li>
</xsl:template>

<xsl:template match="um">
<ul>
  <li>
    <xsl:value-of select="bname"/>
  </li>
</ul>
</xsl:template>

</xsl:stylesheet>
 
Hi hela einen schönen vierten Advent das war genau was ich wollte.

Ich hatte heute auch schon vorher gesucht,
in welchem Tutorial war dies denn zu nachzulesen ?

Habe ich vielleicht bei meiner Suche überlesen. :-(

Danke auf jeden Fall für deine Hilfe
 
Habe noch eine weitere Frage will dafür jetzt aber nicht erst einen extra Threat öffnen.

Code:
...
<hm type="hmp">
		<bname>Home</bname>
                <color>#bb0000</color>
</hm>
....

ist es möglich wenn ich in meiner xml auch noch einen
Knoten mit einem HEX-Farbwert habe die Hintergrundfarbe z.B:
eines Div's für jeden 'hmp' zu ändern.

Aber vielleicht steht das ja auch mit in dem besagten Tut.

oder muss ich das denn eventuell so machen?
V V V V V
Code:
<a>
<xsl:attribute name='href'>
http://www.cloud-green.de/index.php?site=<xsl:value-of select="bname"/></xsl:attribute>
<xsl:attribute name='style'>
background-color:<xsl:value-of select="color"/>
</xsl:attribute>
<xsl:value-of select="bname"/></a>
dies jetzt natürlich zur farblich unterlegung des Links

MfG Grafixboy
 
Hallo Grafixboy,

sicherlich habe ich mich missverständlich ausgedrückt: Die Anwendung von Templates sollte die erste Wahl bei einer XSLT sein, das "for-each"-Element sollte man in den Templates nur anwenden, wenn die Template-Regeln nicht mehr greifen. So steht es in jedem besseren Tutorial. Allerdings versucht jeder, der eine Programmiersprache kennt und sich erstmals mit XSL beschäftigt, an jeder möglichen und unmöglichen Stelle "for-each" anzuwenden.

Ein Tutorial, in dem beispielsweise eine XSLT in eine einfache HTML-Liste enthalten ist, gibt es hier. Mir persönlich hat das Webucator-Tutorial sehr gefallen, da es fast jeden Schritt bzw. jede Regel mit Beispiel belegt. Allerdings ist es auf den ersten Blick nicht sehr übersichtlich und man muss es tatsächlich durcharbeiten.

Zur Hintergrundfarbe: Das kannst du m.E. so machen - musst es aber nicht. Sicherlich wäre es besser die Hintergrundfarbe für die Links als CSS-Stylesheet zu vergeben und aus dem HTML so weit wie möglich raus zu halten. Notfalls kannst du "class"-Attribute statt der "style"-Attribute vergeben.
 

Neue Beiträge

Zurück