Bonjour à tous,

je suis tombé sur un problème avec XPath en jouant avec XForms.

Imaginons que j'ai le XML suivant :

<data>
<row><a>12</a><b>67</b></row>
<row><a>34</a><b>12</b></row>
<row><a>76</a><b>56</b></row>
<row><a>32</a><b>92</b></row>
<row><a>11</a><b>0</b></row>
<row><a>03</a><b>34</b></row>
</data>


J'aimerais récupérer la liste concaténée des valeurs de <b/>séparés par des virgules.
Sans les <a/>, c'est possible comme ceci :

translate(normalize-space(string(/data)), ' ', ',')

Mais quand j'ai cette structure, ou quand j'utilise des attributs, je ne vois pas la solution sachant que le nombre de nœuds est variable et modifié dynamiquement.

Avez vous la réponse ?

Tangui
Modifié par Tangui (04 Aug 2009 - 00:55)
XPath 1.0 n'est effectivement pas très puissant.

Par contre, XPath 2.0, bien plus riche et complexe, permet de faire cela grâce à la fonction fn:string-join

XForms 1.1 n'intègre pas XPath 2.0 mais ce dernier devrait y être intégré dans les versions suivantes.

Mon implémentation XForms (XSLTForms) ne dispose pas encore de XPath 2.0. Il y est cependant facile d'y rajouter des fonctions XPath supplémentaires sauf que, dans cet exemple, il faudrait d'abord rajouter le support de la structure for...

Une autre piste serait l'utilisation d'une transformation XSLT. Là encore, ce n'est pas prévu dans XForms 1.1 mais c'est tout à fait envisageable comme extension et XSLTForms devrait en bénéficier prochainement...

-Alain