Comment faire pour supprimer les éléments indésirables et des attributs de fichier XML à l'aide de XSLT
J'ai un fichier XML , je veux le copier comme il est , mais je veux filtrer certains éléments indésirables et les attributs , par exemple, ce qui suit est le fichier d'origine :
<root>
<e1 att="test1" att2="test2"> Value</e1>
<e2 att="test1" att2="test2"> Value 2 <inner class='i'>inner</inner></e2>
<e3 att="test1" att2="test2"> Value 3</e3>
</root>
Après la filtration ( e3 élément et att2 attribut ont été supprimés ) :
<root>
<e1 att="test1" > Value</e1>
<e2 att="test1" > Value 2 <inner class='i'>inner</inner></e2>
</root>
Notes:
- Je préfère utiliser ( pour chaque élément au lieu de apply-templates si possible )
- J'ai quelques problèmes avec xsl:element et xsl:attribute puisque je ne pouvais pas écrire le nœud actuel nom
Grâce
Pourquoi préférez-vous utiliser
Je pense que "j'ai quelques problèmes avec xsl:element et xsl:attribute..." les points à certains des racines plus profondes question(s).
Il n'est pas clair si vous êtes à la recherche d'une solution générale (éléments inconnus nom) ou spécifique (filtre
Je pense que pour chacun d'eux est plus proche des langages de programmation que de la apply-templates ,
Il est normal de penser que
for-each
au lieu de apply-templates
?Je pense que "j'ai quelques problèmes avec xsl:element et xsl:attribute..." les points à certains des racines plus profondes question(s).
Il n'est pas clair si vous êtes à la recherche d'une solution générale (éléments inconnus nom) ou spécifique (filtre
e3
). La réponse que j'ai fourni, il vous aidera dans le premier cas, même si il est facile de l'adapter à un cas spécifique.Je pense que pour chacun d'eux est plus proche des langages de programmation que de la apply-templates ,
Il est normal de penser que
for-each
est la voie naturelle pour résoudre la plupart des problèmes au début, mais je pense que vous trouverez que c'est complètement inutile comme vous devenez plus familier avec XSLT.OriginalL'auteur Abdullah | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
Je sais que vous préférez utiliser
for-each
, mais pourquoi ne pas utiliser une identité transformer et ensuite remplacer ce modèle avec ce que vous ne voulez pas le garder?Cette feuille de style:
produit:
e3
. J'ai généralisé de votre réponse.C'est vrai, mais je n'ai rien vu dans le post original sur la suppression du dernier nœud quel que soit le nom a été. Le post original juste précisé que
e3
etatt2
ont été supprimés. Suivant votre logique, je pourrais aussi supposer que l'OP a été d'essayer de supprimer tous les éléments dont le nom se termine par "3".oui, qui sait, à moins que la personne directement intéressées :D!
Actullay je veux supprimer "e3" de l'élément de @DevNull dit , pas le dernier élément , merci les gars , vos réponses sont parfaits
C'est la bonne façon de résoudre ce problème et c'est un schéma très commun.
OriginalL'auteur Daniel Haley
@DevNull vous a montré, en utilisant l'identité de transformation est beaucoup plus facile et moins verbeux. De toute façon, ici, c'est une solution possible avec
for-each
et sansapply-templates
comme vous l'avez demandé:Remarque sur l'utilisation de l'identité de transformer
Si votre situation est vraiment ce à quoi il ressemble, je veux dire inconnue nom des éléments, l' @DevNull ne fonctionnera pas et vous aurait besoin de quelque chose de plus général, comme cela:
Cette solution fonctionne même avec les derniers éléments
e4
oue1000
.OriginalL'auteur Emiliano Poggi