Diferencias entre // y / descendiente en XPath seleccionando múltiples hijos
No puedo entender claramente las diferencias entre usar//element
y/descendant::element
al seleccionar varios hijos de un elemento base en XPath.
Dado este fragmento de HTML
<html>
<body>
<div class="popupContent">
<table>
<tr class="aclass"><td> Hello </td> <td> <input type="text" value="FIRST" /> </td></tr>
<tr class="aclass"><td> Goodbye </td> <td> <input type="text" value="SECOND" /> </td></tr>
</table>
</div>
</body>
</html>
Necesito seleccionar cadainput
basado en su posicionamiento en la mesa.//div[@class='popupContent']//input[1]
esto selecciona la primera entrada//div[@class='popupContent']//input[2]
esto daerror //div[@class='popupContent']/descendant::input[1]
esto nuevamente selecciona la primera entrada//div[@class='popupContent']/descendant::input[2]
esto selecciona la segunda entrada
Utilizando/descendant::input
hace lo que necesito: tomar todas las entradas y dejarme seleccionar por posición.
Cómo//
¿diferir de? ¿Por qué devuelve solo el primer elemento y no los siguientes?
Soy consciente deesta otra pregunta pero la respuesta básicamente dice que son alias y apuntan a la documentación, que no puedo entender y carece de un ejemplo concreto.