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>
Pls. partagez votre XSLT généré et la sortie requise. –
Voir les modifications dans mon article – spons
Cela fonctionne très bien pour moi, si vous ajoutez dans modèle –