0
votes

Utilisation de XPath, comment sélectionner oncle / neveu dans le même résultat?

Supposons que le XML suivant: xxx

puis, pour chaque tête , je souhaite sélectionner les deux nœud et < Code> SPEPNode qui contient le mot "ipsum". Je me soucie seulement de ces 2 nœuds, ce qui signifie que je ne veut pas veut le evendeepernode s ou autreNode S pour être également imprimé. < p> résultat souhaité: xxx

peut-il être fait? : -)

J'ai essayé quelque chose comme ça, mais cela ne fonctionne pas:

'/ haut / * [Self :: nœud et auto :: baisse / profonde [contient (@ key = "une valeur", 'ipsum')]] '


0 commentaires

3 Réponses :


0
votes

Utilisation de votre exemple: xxx

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" .


2 commentaires

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] ou // nœud [contient (@Address," Exemple " )]



3
votes

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>


0 commentaires

1
votes

Pour sélectionner (seulement sélectionner) vos nœuds, en supposant que // tête est votre nœud de contexte, vous pouvez utiliser: xxx

ou plus court: xxx

sortie: 4 nœuds.


4 commentaires

Quel est le point de faire // * [nom () = "..."] ? (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 là-bas. La question change donc: pourquoi ne pas utiliser le | ? 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 | très souvent. Considérez-le comme un défi d'écrire l'expression sans cela.