2009-11-09 4 views
3

J'ai essayé de lire divers tutoriels en ligne, mais je ne peux pas avancer sur la résolution de ce problème qui est facile à décrire, mais que je ne peux pas concevoir une solution.XPATH/PHP problème avec last()

Voici quelques exemple XML:

<AAA> 
    <BBB> 
     <CCC>1</CCC> 
     <CCC>2</CCC> 
    </BBB> 
    <BBB> 
     <CCC>3</CCC> 
     <CCC>4</CCC> 
    </BBB> 
</AAA> 

Je veux être en mesure de sélectionner le dernier <CCC> dans chaque récipient ... en d'autres termes, je veux être en mesure de tirer <CCC>2</CCC> et <CCC>4</CCC>. J'ai essayé d'innombrables expressions pour atteindre cette fin mais le mieux que je puisse faire est d'obtenir le dernier <CCC> (qui en contient 4). Il semble que // BBB/CCC [last()] devrait fonctionner mais il sélectionne apparemment tous les CCC qui sont des enfants de BBB (4 au total), et seulement alors il traite le dernier() prédicat - et à cet effet retourne seulement un seul élément <CCC>4</CCC>

Ceci me rend fou! Quelqu'un peut-il me montrer la lumière? Merci beaucoup!!

Répondre

5
/AAA/BBB/CCC[position() = last()] 

//BBB/CCC[position() = last()] et //CCC[position() = last()] semblent aussi travailler. J'ai trouvé un site sympa pour tester xpath ici: http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

+0

Nice! Merci de partager le lien du site Web :) –

+2

Plus court (mais équivalent): '/ AAA/BBB/CCC [dernier()]' ou '// CCC [dernier()]'. Note: Autant que possible, j'éviterais la raccourcie '//', car elle est relativement coûteuse. Même quelque chose comme '/ */*/CCC [last()]' est meilleur que '//'. – Tomalak

Questions connexes