Pourquoi XSLT génère-t-il tout le texte par défaut?

Bonjour, j’ai effectué une transformation qui laisse tomber une étiquette si elle est nulle.

Je voulais vérifier si ma transformation fonctionnait bien, alors au lieu de la vérifier manuellement, j’ai écrit un code XSLT supplémentaire qui vérifie simplement la présence de cette balise dans le XML OUTPUT, si elle est nulle, le second XSLT devrait afficher un texte “TROUVÉ”. (En réalité, je n’ai pas besoin de sortie XML, mais j’utilise simplement XSLT pour la recherche.)

Quand j’ai essayé avec ce code XSL ::

  FOUND   

Il génère toutes les TEXT DATA présentes dans le fichier XML,

pour éviter cela, je devais écrire ce code:

   FOUND    

Pourquoi l’ancien code a-t-il généré TEXT, pourquoi devrais-je insister pour que XSL ignore tout autre texte? est-ce le comportement de tous les parsingurs XML ou seulement de mon propre (j’utilise un parsingur MSXML).

Pourquoi l’ancien code a-t-il généré TEXT, pourquoi devrais-je insister pour que XSL ignore tout autre texte? est-ce le comportement de tous les parsingurs XML ou seulement de mon propre

Vous découvrez l’une des fonctionnalités XSLT les plus fondamentales telles que spécifiées dans la spécification: les modèles intégrés de XSLT .

De la Spec :

Il existe une règle de modèle intégrée permettant au traitement récursif de continuer en l’absence d’une correspondance de modèle réussie par une règle de modèle explicite dans la feuille de style. Cette règle de modèle s’applique aux nœuds d’élément et au nœud racine. L’illustration suivante montre l’équivalent de la règle de modèle intégrée:

    

Il existe également une règle de modèle intégrée pour chaque mode, qui permet au traitement récursif de continuer dans le même mode en l’absence d’une correspondance de modèle réussie par une règle de modèle explicite dans la feuille de style. Cette règle de modèle s’applique aux nœuds d’élément et au nœud racine. Le tableau suivant montre l’équivalent de la règle de modèle intégrée pour le mode m.

    

Il existe également une règle de modèle intégrée pour les nœuds de texte et d’atsortingbut qui copie le texte via:

    

La règle de modèle intégrée pour le traitement des instructions et des commentaires ne fait rien.

  

La règle de modèle intégrée pour les nœuds d’espace de noms ne fait également rien. Il n’y a pas de motif pouvant correspondre à un nœud d’espace de noms; Ainsi, la règle de modèle intégrée est la seule règle de modèle appliquée aux nœuds d’espace de noms.

Les règles de modèle intégrées sont traitées comme si elles étaient imscopes implicitement avant la feuille de style et ont donc une priorité d’importation inférieure à toutes les autres règles de modèle. Ainsi, l’auteur peut remplacer une règle de modèle intégrée en incluant une règle de modèle explicite.

Ainsi, le comportement signalé est le résultat de l’application des modèles intégrés – le premier et le deuxième des trois.

C’est un bon modèle de conception XSLT pour remplacer les modèles intégrés avec le vôtre, qui émettra un message d’erreur à chaque appel afin que le programmeur sache immédiatement que sa transformation “fuit”:

Par exemple , s’il existe ce document XML:

   Don't want to see this   

et il est traité avec cette transformation :

             

le résultat est :

  Don't want to see this  

et le programmeur sera grandement confus de la façon dont le texte indésirable est apparu.

Toutefois, l’ajout de ce catch-all template permet d’éviter toute confusion et de détecter immédiatement les erreurs :

    WARNING: Unmatched element:     

En plus de la sortie confuse, le programmeur reçoit un avertissement expliquant le problème immédiatement :

  WARNING: Unmatched element: c 

Il existe plusieurs règles de modèle intégrées dans XSL, dont l’une est la suivante:

    

Il produit du texte.