2013-06-03 4 views
1

Je travaille avec un xslt pour nettoyer un code html généré par un éditeur.Nettoyage html XSLT récursif

Le code contient la structure suivante:

<span name="x">1<b>test text</b> 
    <span name="y">2</span> 
</span> 
<span name="y">3 
    <span name="y">4</span> 
    <span name="x">1</span> 
</span> 
<span name="y">5<i>test</i> 
    <span name="y"><u>6</u>7</span> 
</span> 

La chose est que xslt a besoin de préserver la structure HTML. Et doit compléter 2 actions. s'il trouve une plage avec le nom x. Il doit l'enlever. (Ce n'est pas un problème)

Mais quand il trouve un y qui n'est pas dans un x. Il doit prendre les nœuds enfants (valeur de node()) et les placer dans la sortie. Les nœuds enfants doivent être vérifiés pour toutes les autres envergures. A.t.m J'ai eu quelques xslt qui trouvent les travées de premier niveau (numéros 1 et 3). Mais il copie le code HTML interne et n'applique pas les modèles pour innerHTML.

Quelqu'un at-il ce problème ou connaît-il une solution?

EDIT: Sortie nécessaire comme expliqué ci-dessus.

345<i>test</i><u>6</u>7 

EDIT2: XSLT

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="span[@name='x']"> 
//This deletes the node.. But only one level? 
</xsl:template> 
<xsl:template match="span[@name='y']"> 
//This needs to play all templates again to remove or get inner nodes() see case x & y 
</xsl:template> 
+1

Pls. partagez votre XSLT généré et la sortie requise. –

+1

Voir les modifications dans mon article – spons

+3

Cela fonctionne très bien pour moi, si vous ajoutez dans modèle –

Répondre

1

Vous avez juste besoin d'inclure apply-templates dans votre dernier modèle pour obtenir une sortie désirée.