J'ai un processus XSLT 2 ou 3 en cours de traitement où je passe une chaîne de mots unique en tant que paramètre dans le modèle XSL. Pour cette tâche je passe un nom de famille qui est utilisé pour trouver tous les éléments <person>
dans plusieurs documents XML où c'est l'enfant <nL>
, nom en dernier, l'élément correspond au paramètre que j'ai passé. Cela fonctionne mais je voudrais modifier mon expression XPATH pour pouvoir passer un paramètre séparé par une virgule. Par exemple, je peux maintenant passer le nom de famille = "Johnson" mais voudrait pouvoir passer le nom = "Johnson, Johnston"Comment faire correspondre des valeurs dans une variable dans un prédicat dans XPATH
J'utilise le dernier processeur de Saxon dans Java. J'invoque la transformation avec
java net.sf.saxon.Transform -s:all-sources.xml -xsl:xsl/index-person-param.xsl surname="Johnson"
tout-sources.xml est une liste XML formated d'autres fichiers XML.
Je n'inclurai qu'une petite partie de mon code à moins d'en avoir besoin. C'est probablement un problème XPATH simple que je ne comprends tout simplement pas.
Actuellement avant mon template match j'ai cette déclaration de paramètres
<xsl:param name="surname" as="xs:string" required="yes"/>
je trouve tous les <person>
éléments correspondant à la variable suivante
<xsl:variable name="nameMatch" select="document(/files/file/@filename)//person[nL = $surname]"/>
Cela fonctionne lorsque le nom de $ variable est une chaîne d'un mot. Comment pourrais-je modifier le prédicat ci-dessus afin que $ nom puisse contenir deux ou plusieurs mots séparés par une virgule?
J'ai essayé plusieurs modifications en utilisant tokenize()
et mais je n'ai toujours pas trouvé de solution de travail. Merci, Michael
Avez-vous essayé l'une de ces: https://stackoverflow.com/questions/6357166/how-to-compare-against-multiple-strings-in-xslt – Lesiak
J'ai cherché dans le fil que vous avez fourni et trouvé une solution. J'ai changé le document 'select =" (/ files/file/@ nom de fichier) // person [nL = $ nom de famille] "' 'select =" document (/ files/file/@ nom de fichier) // person [correspond (nL, $ patronyme)] "' qui me donne le résultat désiré. Merci beaucoup pour l'aide – Sawtooth67