2010-10-14 30 views
1

Nous avons en entrée un fichier XML comme suit:XSLT: sélectionnez un nœud qui commence par une liste prédéfinie d'éléments

<R> 
    <MT N="folder" V="Folder1\Subfolder1" /> 
    <MT N="folder" V="Folder2xx\Subfolder1" /> 
    <MT N="folder" V="Folder3yyyy\Subfolder1" /> 
    <MT N="folder" V="Folder4zzzz\Subfolder1" /> 
</R> 

Dans notre XSLT qui effectue l'affichage, l'entrée:

<xsl:value-of select="MT[@N='folder']/@V"/> 

affiche:

Folder1\Subfolder1 Folder2xx\Subfolder1 Folder3yyyy\Subfolder1 Folder4zzzz\Subfolder1 

Ce que nous devons réaliser est de sélectionner l'entrée unique qui commence par une liste configurable prédéfinie de str par exemple, par exemple si notre liste définie avant est

Folder2xx, Folder18ppp, Folder212aaa 

Je voudrais afficher en sortie uniquement

Folder2xx\Subfolder1 

La chose optimale serait même:

Folder2xx\Subfolder1 (linked 3 times) 

mais j'apprécierais vraiment aider sur la sélection de l'élément unique. C'est malheureusement trop complexe pour mes connaissances sur XSLT, quelqu'un peut-il m'aider? Notre système prend en charge XSLT 2.0 et XPATH 2.0

merci beaucoup!

Mario

+0

Bonne question, +1. Voyez ma réponse pour une solution courte XPath 2.0 à 1 couche. :) –

+0

Quelle est la logique derrière le '(lié 3 fois)'? –

+0

@Alejandro: en fait, la liste des éléments "dossier" est une liste d'emplacements réels et de liens vers eux, ainsi le (lié 3 fois) est le nombre d'éléments qui correspondent aux modèles des emplacements réels. Désolé, ce n'était pas clair, mais c'était vraiment une chose très difficile à faire, je ne m'attendais pas à avoir une solution aussi claire (et rapide!) ... – Mario

Répondre

0

Utilisation:

MT[@N='folder'] 
    /@V[substring-before(.,'\') 
     = 
     ('Folder2xx', 'Folder18ppp', 'Folder212aaa') 
     ] 
+0

@Dimitre: +1 Réponse rapide. Je ne l'ai pas vu. Supprimer le mien. –

+0

@Alejandro: Undelete il. On ne sait pas qui était le plus rapide :) –

+0

@Alejandro: Il serait injuste que le mien ait eu un upvote et le vôtre n'a pas. –