Rechercher : dans
Par :

[xsl]imbrication de balise

Dernière réponse le 16 avr 2009 à 13:03:06 Nass2, le 16 avr 2009 à 11:56:49 
 Signaler ce message aux modérateurs

Bonjour,
j'ai un problème avec l'imbrication de balise en xsl.
je m'explique : j'ai un fichier xml comme suis :

<Worksheet>
  <Table>
   <Row>
    <Cell><Data>1</Data></Cell>
    <Cell><Data>Menu 1</Data></Cell>
   </Row>
   <Row>
    <Cell><Data>2</Data></Cell>
    <Cell><Data>Sous Menu 1.1</Data></Cell>
   </Row>
   <Row>
    <Cell><Data>2</Data></Cell>
    <Cell><Data>Sous Menu 1.2</Data></Cell>
   </Row>
   <Row>
    <Cell><Data>2</Data></Cell>
    <Cell><Data>Sous Menu 1.3</Data></Cell>
   </Row>
   <Row>
    <Cell><Data>3</Data></Cell>
    <Cell><Data>Sous Menu 1.3.1</Data></Cell>
   </Row>
  </Table>
 </Worksheet>


le but est de la formater avec un fichier xsl pour obtenir un menu
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" encoding="UTF-8"/>

<xsl:template match="/Worksheet">
    <xsl:variable name="nbLigne">
        <xsl:value-of select="count(Table/Row)"/>
    </xsl:variable>
<div id="menu">
	<div id="menu-titre">
		MENU
	</div>
	<div id="menu-contenu">
	<ul>
		<xsl:for-each select="Table/Row">
			<li>
		<xsl:variable name="rang" select="Cell[position() = 1]/Data" />
		<xsl:if test="position() = 1">
			<xsl:variable name="rangprec" select="1" />
		</xsl:if>
		<xsl:if test="rang > rangprec">
			<ul>
		</xsl:if>
			<li><span>
			<xsl:value-of select="Cell[position() = 2]/Data" />
			</span>
		<xsl:if test="rang = rangprec">
			</li>
		</xsl:if>
		<xsl:if test="rang < rangprec">
				</ul></li>
		</xsl:if>
		<xsl:variable name="rangprec" select="Cell[position() = 1]/Data" />
		</xsl:for-each>
	</ul>
	</div>
</div>

</xsl:template>
</xsl:stylesheet>


le problème ce situe au niveau de l'imbrication des balises <ul> ou <li> avec les balise <xsl:if> et </xsl:if> en effet le xsl nécessite que les balises ouvertes soit fermé en l'occurrence elles le sont mais pas au sein de le même imbrication

Pour ce qui est du message d'erreur obtenu (avec le moteur xsl de php) :
Warning: DOMDocument::load() [domdocument.load]: Opening and ending tag mismatch: ul line 21 and xsl:if in file:menu.xsl, line: 22 in traitement.php on line 108


quelqu'un peut m'aider
Merci d'avance pour vos réponses
Configuration: Windows Vista
Firefox 3.0.8

Meilleures réponses pour « [xsl]imbrication de balise » dans :
Les espaces de nom XML Voir Introduction aux espaces de noms XML définit un système permettant de créer des balises modulaires, c'est-à-dire pouvoir donner la possibilité d'utiliser des balises provenant de différents langages à balise au sein d'un même document grâce à la...
Mise en page de XML avec XSL Voir Introduction à XSL XML est un langage de structuration des données, et non de représentation des données. Ainsi XSL (eXtensible StyleSheet Language) est un langage recommandé par le W3C pour effectuer la représentation des données de documents XML....
Les balises dans la partie 'head' VoirAvant tout : rappel sur le doctype La partie head Balises meta Mots clés Description Déclaration de la langue du site Catégorie Auteur Restrictions pour les moteurs de recherche Adresse de la page Logiciels utilisés pour la...
Les balises HTML VoirHTML, un langage à balises Le HTML n'est pas un langage de programmation. Il s'agit d'un langage permettant de décrire la mise en page et la forme d'un contenu rédigé en texte simple. Une page HTML est ainsi un simple fichier texte...
Introduction à XML VoirPrésentation de XML XML (entendez eXtensible Markup Language et traduisez Langage à balises étendu, ou Langage à balises extensible) est en quelque sorte un langage HTML amélioré permettant de définir de nouvelles balises. Il s'agit effectivement...
Structure d'un document XML VoirQu'est-ce que le XML? La norme XML en tant que telle doit être vue comme un outil permettant de définir un langage (on dit alors qu'il s'agit d'un métalangage), permettant de créer des documents structurés à l'aide de balises. Une balise est une...

1

 Nass2, le 16 avr 2009 à 13:03:06
  • +1

J'ai trouver :

<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" encoding="UTF-8"/>

<xsl:template match="/Worksheet">
    <xsl:variable name="nbLigne">
        <xsl:value-of select="count(Table/Row)"/>
    </xsl:variable>
<div id="menu">
	<div id="menu-titre">
		MENU
	</div>
	<div id="menu-contenu">
	<ul>
		<xsl:variable name="rangprec" select="1" />
		<xsl:for-each select="Table/Row">
		<xsl:variable name="rang" select="Cell[position() = 1]/Data" />
		<xsl:variable name="pos" select="position()" />
		<xsl:value-of select="$rangprec" />><xsl:value-of select="$rang" />
		<xsl:if test="$rang > $rangprec">
			<xsl:text disable-output-escaping="yes"><ul></xsl:text>
		</xsl:if>
			<xsl:text disable-output-escaping="yes"><li></xsl:text>
			<span>
			<xsl:value-of select="Cell[position() = 2]/Data" />
			</span>
		<xsl:if test="$rang = $rangprec">
			<xsl:text disable-output-escaping="yes"></li></xsl:text>
		</xsl:if>
		<xsl:if test="$rang < $rangprec">
				<xsl:text disable-output-escaping="yes"></ul></li></xsl:text>
		</xsl:if>
		<xsl:variable name="rangprec" select="Cell[position() = 1]/Data" />
		</xsl:for-each>
	</ul>
	</div>
</div>

</xsl:template>
</xsl:stylesheet>


maintenant j'ai a faire à d'autre erreur

Répondre à Nass2
Collection CommentÇaMarche.net