10Fermer12
GoldenCrystalLe 26/09/2012 à 00:31
[nosmile]Tiens, voilà un exemple fonctionnel hacké à la va-vite… (Enfin, si je ne me suis pas trompé, en tout cas ça semblait fonctionner sous Safari)
tree.xml :
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="tree.xsl" type="text/xsl"?>
<tree title="XML Tree">
	<node title="Node A">
		<node title="Node A" />
		<node title="Node B">
			<node title="Node A" />
			<node title="Node B" />
			<node title="Node C" />
			<node title="Node D" />
		</node>
		<node title="Node C" />
		<node title="Node D" />
	</node>
	<node title="Node B" />
	<node title="Node C" />
	<node title="Node D" />
</tree>

tree.xsl :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml">

	<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="no" media-type="text/xml"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
	
	<!-- Tree template -->
	
	<xsl:template match="/tree">
		<html:html xml:lang="en" lang="en">
			<html:head>
				<html:title><xsl:value-of select="@title" /></html:title>
				<html:meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
				<html:meta http-equiv="Content-Style-Type" content="text/css" />
				<html:link rel="stylesheet" type="text/css" href="style.css" />
			</html:head>
			<html:body>
				<xsl:call-template name="node_children" />
			</html:body>
		</html:html>
	</xsl:template>
	
	<!-- Node templates -->
	
	<xsl:template name="node">
		<xsl:choose>
			<xsl:when test="not(*) and not(normalize-space())">
				<html:li><xsl:call-template name="node_title" /></html:li>
			</xsl:when>
			<xsl:otherwise>
				<html:li>
					<xsl:call-template name="node_title" />
					<xsl:call-template name="node_children" />
				</html:li>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	
	<xsl:template name="node_title">
		<xsl:value-of select="@title" />
	</xsl:template>
	
	<xsl:template name="node_children">
		<html:ul>
			<xsl:for-each select="node">
				<xsl:call-template name="node" />
			</xsl:for-each>
		</html:ul>
	</xsl:template>
	
</xsl:stylesheet>

(Bon c'est basique et y'a pas le javascript pour agrandir/rétrécir, mais c'est pour montrer le principe ^^)

./9 > Que dire sinon… rotfl