Bonjour,

J'ai besoin de transformer du XHTML en utilisant XSLT.
J'arrive à faire pas mal de choses, mais je bloque sur le déplacement de noeud.
Exemple :

J'ai en entrée le code suivant qui n'est pas valide XHTML puisque la balise ul ne peut contenir que des balises li et pas directement des balises ul :

<ul>
  <li>aa</li>
  <ul>
    <li>bb</li>
  </ul>
  <li>cc</li>
</ul>

Je souhaiterai donc le transformer en code XHTML valide :

<ul>
  <li>aa
    <ul>
      <li>bb</li>
    </ul>
  </li>
  <li>cc</li>
</ul>


Pour cela, la solution que j'envisage est de déplacer le noeud <ul><li>bb</li></ul> à l'intérieur (à la fin du contenu) du noeud <li>aa ... </li>

Existe-t-il un moyen de réaliser cette transformation ?

Merci pour votre aide
Bonjour,

Globalement j'appliquerais l'algorithme suivant :
- le template principal recopie le XML source, mais évite les éléments ul ayant un élément ul pour parent.
- template spécifique pour le li : recopie du contenu, et recopie de l'élément following-sibling s'il s'agit d'un <ul>.
Bonjour et merci de ta réponse,

Entre temp, j'ai réussi à faire à peu près l'algo que tu mentionnes et ça fonctionne visiblement pas mal :

<xsl:template match="node()|@*">
	<xsl:copy>
		<xsl:apply-templates select="node()|@*"/>
	</xsl:copy>
</xsl:template>

<xsl:template match="li[name(following-sibling::*[1])='ul']">
	<xsl:copy>
		<xsl:apply-templates select="node()|@*"/>
		<xsl:copy-of select="following-sibling::*[1]"/>
	</xsl:copy>
</xsl:template>

<xsl:template match="ul/ul"/>


Mais il y a d'autres cas que je n'avais pas prévu et j'ai donc choisi une autre méthode.

Encore merci pour ton aide