Haz todo lo posible por entender el código de forma correcta previamente a utilizarlo a tu trabajo si ttienes algo que aportar puedes compartirlo con nosotros.
Solución:
/
contra //
en general
Ambos child
(/
) y descendant-or-self
(//
) son ejes en XPath.
-
/
es corto para/child::node()/
.Usar
/
para seleccionar un nodo hijos inmediatos. -
//
es corto para/descendant-or-self::node()/
.Usar
//
para seleccionar un nodo, sus hijos, sus nietos, y así sucesivamente de forma recursiva.
/
contra //
con preceding-sibling::*
Su pregunta específica se refiere a la diferencia entre //preceding-sibling::*
y /preceding-sibling::*
.
Dado que sus datos están fuera del sitio y son complejos, consideremos en su lugar este XML presente y más simple:
Para este XML,
/r/preceding-sibling::*
no selecciona nada porquer
no tiene hermanos anteriores./r//preceding-sibling::*
selecciona los elementos hermanos precedentes de todos los descendientes o propios nodos der
. Es decir,a
,b
,c
yd
. (Recordar,/r//preceding-sibling::*
es corto para/descendant-or-self::node()/preceding-sibling::*
, no/descendant-or-self::*/preceding-sibling::*
) Tenga en cuenta que aunqueb
yd
son hermanos predecesores de no elementosson hermanos predecesores de nodos de texto porque el XML anterior tiene espacios en blanco despuésb
yd
. Si se eliminaron todos los espacios en blanco, soloa
yc
sería seleccionado./r/descendant::*/preceding-sibling::*
selecciona los elementos hermanos precedentes de todos los descendientes elementos der
. Es decir,a
yc
. Tenga en cuenta queb
yd
no se seleccionan porque no preceden a los elementos hermanos de ningún descendiente elementos der
— a diferencia del ejemplo anterior, texto los nodos no califican.
Te mostramos las reseñas y valoraciones de los usuarios
Eres capaz de añadir valor a nuestra información cooperando tu veteranía en las explicaciones.