Supposons que le XML suivant: puis, pour chaque peut-il être fait? : -) p> J'ai essayé quelque chose comme ça, mais cela ne fonctionne pas: p> tête code>, je souhaite sélectionner les deux
nœud code> et < Code> SPEPNode code> qui contient le mot "ipsum".
Je me soucie seulement de ces 2 nœuds, ce qui signifie que je ne veut pas strong> veut le
evendeepernode code> s ou
autreNode code> S pour être également imprimé. P> < p> résultat souhaité: p>
'/ haut / * [Self :: nœud et auto :: baisse / profonde [contient (@ key = "une valeur", 'ipsum')]] ' code> p> p>
3 Réponses :
Utilisation de votre exemple: dans votre exemple, le "nœud" et "profond" ont la même clé afin que vous puissiez vérifier la clé de la clé, puis vérifiez qu'il contient "ipsum" . p> p>
Toutes mes excuses, le nœud contient un «nom de clé» différent dans mon exemple réel. J'ai changé cela dans la question originale maintenant. Comment obtiendrais-je le même résultat lorsque "nœud" a "adresse" au lieu de "clé"?
Vous pouvez trouver des nœuds par attribut en mettant [@ attribut = "exemple"] alors // nœud [@ adresse = "exemple] code> ou
// nœud [contient (@Address," Exemple " )] code>
peut-il être fait? P>
Non, pas comme vous l'envisagez. P>
XPath est un la langue de sélection em>. Il ne peut que sélectionner ce qui est là. Par exemple, ce P>
<node key="some value"></node> <deepnode key="some value">lorem ipsum dolor</deepnode> <node key="some value"></node> <deepnode key="some value">lorem ipsum dolor</deepnode>
Pour sélectionner (seulement sélectionner) vos nœuds, en supposant que ou plus court: p > sortie: 4 nœuds. p> p> // tête code> est votre nœud de contexte, vous pouvez utiliser:
Quel est le point de faire // * [nom () = "..."] code>? (Je sais ce que ça fait, je ne sais pas pourquoi vous utilisez cela.)
Vous voulez dire la première expression? Depuis que je n'utilise pas "|" Pour écrire le XPath, je ne peux pas l'écrire d'une autre manière que les conditions attendues (2 types d'éléments avec des attributs spécifiques et 1 contiennent des conditions). Je suis ouvert pour des suggestions cependant.
Je suppose que votre façon de construire les expressions est très longue, le manque de parenthèses est confus - je n'ai même pas fait défiler jusqu'à la fin, donc j'ai raté le ou code> là-bas. La question change donc: pourquoi ne pas utiliser le
| code>? Cela rendrait l'expression plus simple.
Oui, l'expression pourrait être plus courte avec "|" opérateur (et probablement plus rapide). Je suis aussi en faveur du plus court, le plus simple, le plus rapide. Mais je n'utilise pas | code> très souvent. Considérez-le comme un défi d'écrire l'expression sans cela.