Éléments distincts et de regroupement
Donné le fragment xml suivant:
<Problems>
<Problem>
<File>file1</File>
<Description>desc1</Description>
</Problem>
<Problem>
<File>file1</File>
<Description>desc2</Description>
</Problem>
<Problem>
<File>file2</File>
<Description>desc1</Description>
</Problem>
</Problems>
J'ai besoin de produire quelque chose comme
<html>
<body>
<h1>file1</h1>
<p>des1</p>
<p>desc2</p>
<h1>file2</h1>
<p>des1</p>
</body>
</html>
J'ai essayé à l'aide d'une clé, comme
<xsl:key name="files" match="Problem" use="File"/>
mais je ne comprends pas vraiment comment le prendre la prochaine étape, ou si c'est la bonne approche.
OriginalL'auteur rjohnston | 2008-12-30
Vous devez vous connecter pour publier un commentaire.
Voici comment je le ferais, à l'aide de la Muenchean méthode. Google 'xslt muenchean" pour plus d'informations à partir des gens intelligents. Il pourrait être une façon intelligente, mais je vais laisser cela à d'autres.
Une remarque, je ne peux pas utiliser capitales au début de l'élément xml de noms, par exemple "Fichier", mais c'est à vous de voir.
L'idée est, clé de chaque élément du Fichier à l'aide de sa valeur de texte. Alors n'afficher que les valeurs du fichier si ils sont du même élément que le détrompeur. Pour vérifier si elles sont de la même, l'utilisation generate-id. Il y a une approche similaire où vous comparez le premier élément qui correspond. Je ne peux pas vous dire qui est plus efficace.
J'ai testé le code ici à l'aide de Marrowsoft Xselerator, mon préféré xslt outil, bien que n'étant plus disponible, autant que je sache. Le résultat que j'ai obtenu est:
C'est à l'aide de msxml4.
J'ai trié la sortie par Fichier. Je ne suis pas sûr si vous avez envie de ça.
J'espère que cette aide.
Des acclamations. Je n'avais même pas remarqué que vous êtes boursier de l'Aussie, sinon je l'aurais utilisé beaucoup plus familières. 🙂
J'ai fourni un peu plus proprement et sans doute un peu une solution plus efficace que Richards.
OriginalL'auteur Richard A
Cette solution est un peu plus simple, plus efficace et en même temps plus générale que celui présenté par Richard:
Cette transformation:
lorsqu'il est appliqué au document XML fourni par le:
Produit le résultat voulu:
Ne remarque la simple correspond au motif de la première
<xsl:key>
et comment, à l'aide d'un deuxième<xsl:key>
, nous permet de repérer tous les "Description
" les éléments qui sont les frères et sœurs d'un "File
" élément qui a une valeur donnée.Nous aurions pu utiliser plus de modèles au lieu de
<xsl:for-each>
pull-traitement, cependant c'est assez simple et la solution profite vraiment de plus en plus courte, plus compact et plus lisible le code.Noter également, que dans XSLT 2.0 on utilise en général la
<xsl:for-each-group>
instruction au lieu de la Muenchian méthode.Bonne et heureuse Année à toi, Richard.
OriginalL'auteur Dimitre Novatchev
Ce XSLT 1.0 solution feront aussi l'affaire. Peu plus succinct que les autres solutions!
Résultat:
OriginalL'auteur Nick Grealy