permet de dire que j'ai l'instance de données de formulaire suivante dans mon point de vue.xml: Je souhaite sélectionner tous les noms de fruits de l'instance ci-dessus.
J'ai essayé les manières suivantes, mais elle sélectionne toujours le premier fruit. P> Veuillez fournir un moyen de surmonter cela dans XPATH P> P>
3 Réponses :
Essayez ceci Il trouvera tous les noms de fruits où qu'ils se trouvent dans la hiérarchie du document. p> p>
@Furgan: Démarrage // code> n'est pas une bonne pratique lorsque le schéma est bien connu.
@Alejandro, c'est une généralisation qui n'est pas toujours correcte. Si une implémentation de XPath comporte un index des éléments à sa disposition (comme la base de données existante), écrire // nom de fruit code> sera effectivement plus rapide! En outre, exécutant
// nom de fruit code> sur une petite instance comme celle-ci ne fera probablement pas la différence. La réalité est que l'expression est "meilleure" dépend de quelques facteurs.
@ebruze: Tout d'abord, ce n'est pas une bonne pratique. Deuxièmement, je n'ai pas dit qu'un chemin complet serait toujours plus rapide. Mais outre les optimisations de la mise en œuvre, le problème est dans la complexité: Descefant CODE> Axis traversera l'ensemble de l'arbre de descente, même après avoir trouvé un match. De plus, la puissance d'expression de la langue peut facilement casser toute optimisation. Penser dans
(.) [$ Complex-condition] // élément code>.
@Alejandro: Il ne suffit pas de dire que quelque chose n'est pas une bonne pratique. Il doit y avoir une justification derrière elle. Un bon optimiseur XPath travaillant avec un indice n'a pas besoin de traverser un arbre, une période. Et si ce que vous voulez vraiment exprimer est "Trouver tous les nom de fruit code>" dans un document, puis écrivez
// nom de fruit code> exprime exactement cela.
premier:
Il peut s'agir d'une faute de frappe n'importe quel moyen de vous indiquer que XML a un mauvais nœud finissant Dans vos xForms, vous devez itérer sur les Resultats pour obtenir la liste des fruits. P> Si vous ne voulez que des noms de fruits, vous pouvez essayer p>
Si vous souhaitez sélectionner tous les
instangehata code> (
<xforms:instance xmlns="" id="instanceData">
J'ai édité ma question avec la vue correcte.xml. Je n'ai pas utilisé l'espace de noms par défaut. Mais toujours ça ne marche pas.
@Thangamani, si cela ne fonctionne pas, je suppose que cela est dû à la façon dont vous utilisez cette expression. Voir ici un exemple complet qui montre tous les fruits: Gist.github.com/859678
À côté des deux expressions sont verboses et ils ne pourraient être que
instance ('instangeta') / fruits / fruits / noms de fruits code>, si une expression entraîne tous les nœuds sélectionnés ou tout simplement le premier dépend de La méthode du moteur XPath spécifique utilisée.
Je sais que c'est vieux, mais personne n'a noté que la déclaration d'espace de noms est "XXForms" et ne correspond pas à l'espace de noms "XForms"?