2009-05-20 7 views

Répondre

8

Faire usage de la règle de modèle intégré pour les nœuds de texte, ce qui est de les copier sur le résultat. Même pour un nouveau mode de traitement que vous spécifiez ("all-but-a" dans le code ci-dessous), les règles intégrées fonctionneront: pour les éléments, (récursivement) traiter les enfants; pour les nœuds de texte, copiez. Vous n'avez besoin que de surcharger l'un d'entre eux, la règle pour les éléments <a>, d'où la règle de modèle vide, qui supprime effectivement le texte.

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="myNode"> 
    <!-- Process children --> 
    <xsl:apply-templates mode="all-but-a"/> 
    </xsl:template> 

      <!-- Don't process <a> elements --> 
      <xsl:template mode="all-but-a" match="a"/> 

</xsl:stylesheet> 

Pour une description complète de la façon dont les règles de modèle intégrées fonctionnent, consultez la section « intégrée dans les règles du modèle » de "How XSLT Works" sur mon site.

1
<xsl:for-each select="//*[text() and name() != 'a']"> 
<xsl:value-of select="."/> 
</xsl:for-each> 
+0

Merci! Puis-je exclure les tags ? – joe

+0

Il ne saute pas Tags – Blerta

+2

Ceci sélectionne chaque nœud qui contient du texte qui n'est pas une balise d'ancrage. Il voulait sélectionner le TEXTE de tous les nœuds qui n'étaient pas dans les balises A. – fearphage

3

si vous traitez actuellement votre noeud.

<xsl:value-of select="."/> 

doit retourner tout le contenu textuel

+0

Merci! Puis-je exclure les tags ? – joe

1

Je crois que c'est ce que vous cherchez:

<xsl:for-each select="//text()[not(ancestor::a)]"> 
    <xsl:value-of select="."/> 
</xsl:for-each> 

Il sélectionne tous les nœuds de texte qui ne sont pas des enfants de balises d'ancrage.

Questions connexes