2017-03-08 4 views
0

Je veux combiner 3 requêtes avec l'opérateur union "|" qui fonctionne bien, mais je veux définir la priorité pour chaque requête, donc par exemple si la première requête va apporter le résultat alors il doit être le noeud [0]xpath - comment faire des requêtes union avec priorité de requête

exemple: // div [@ class = 'class1' ] | // div [@ class = 'class2'] | // div [@ class = 'class3']

Si une chaîne a plus d'une requête, elle doit suivre une priorité ou, mieux encore, ne pas afficher de résultats sur d'autres requêtes. aider Merci vous

+0

peut-être ajouter la requête xpath aux deux autres xpaths? de sorte que les deux autres xpath s'appuient sur le précédent xpath .. exemple: '// div [@ class = 'class1'] | // div [@ class = 'class1']/follow-sibling :: div [@ class = 'class2'] 'vous devez être créatif si – becixb

+0

C'est un peu le contraire, j'ai besoin de" si la classe1 n'existe pas que de chercher la classe2 " – Boris

+0

Veuillez spécifier la version de XPath. Si c'est XPath 1.0, vous pourriez ne pas avoir de chance. –

Répondre

0

Si vous voulez un seul nœud dans le résultat, l'approche habituelle (en supposant XPath 2.0 ou supérieur) est:

(//div[@class='class1'], //div[@class='class2'], //div[@class='class3'])[1] 

S'il pourrait y avoir plusieurs nœuds avec @ class = 'classe1 ', et vous voulez tous, et vous ne voulez que des nœuds avec @ class =' ​​class2 's'il n'y en a pas avec classe @ class =' 1 ', alors c'est un peu plus difficile. Mais avant d'aller plus loin, vous devez nous indiquer quelle version de XPath vous utilisez.

+0

Merci pour la réponse, je l'utilise avec php, donc je pense que sa version 1.x – Boris

+0

Ensuite, je pense que vous allez devoir faire une partie du travail dans le code PHP, en émettant plusieurs requêtes XPath jusqu'à ce que l'une d'elles sélectionne quelque chose. (Sauf si vous pouvez passer à Saxon/C qui fournit XPath 3.0 aux utilisateurs de PHP ...) –

0

//div[@class='class1'] | //body[not(div[@class='class1'])]/div[@class='class2'] | //body[not(div[@class='class1'] and not(div[@class='class2']))]/div[@class='class3']

si Class1 existe, 2e et 3e XPath se traduira par rien, si la classe 2 existe alors 3 XPath se traduira par rien ..

qui est l'idée, mais vous devez travailler plus loin ... soyez créatif mon homme.