2012-02-10 24 views

Respuesta

13

Si usted está tratando de probar el nombre, que casi lo tenían:

//text()[name(parent::*)='p'] 

Si usted está tratando de devolver el nombre:

name(//text()/parent::*) 
+0

¿Es esta una mejor práctica que el nombre (// text()/..)? – emschorsch

+1

No, '..' es lo mismo que' parent :: '. Usualmente uso '..', pero esta es una respuesta antigua y quién sabe lo que estaba pensando ese día ;-) –

2
//text/..[@name='p'] 

Esto hará que todos los padres de <text> nodos siempre que el padre tiene un atributo de namep.

+1

Su terminología es confusa, pero habla de nodos de texto, a diferencia de los elementos '' ... Y los nombres de los elementos, en contraposición a los atributos 'name'. – LarsH

+0

Ah. Gracias, LarsH. –

4

FYI, punto de terminología: una el nodo de texto no es un elemento.

De todos modos, la forma más sucinta para seleccionar el padre del nodo actual es ..

Por lo tanto, el nombre del elemento padre del nodo actual (que podría ser un nodo de texto) se name(..)

sustituyendo esto en su expresión XPath:

//text()[name(..)='p'] 

Pero de una manera menos rotonda a escribir eso sería

//p/text() 

(suponiendo que los elementos p en el documento no tengan prefijo de espacio de nombres). De cualquier manera, está seleccionando todos los nodos de texto que son secundarios de elementos llamados p.

+0

Gracias por esta explicación adicional. – Xeoncross

Cuestiones relacionadas