2009-01-17 19 views
17

Estoy análisis sintáctico XML algunos algo como esto:¿Seleccionar primera instancia solo con XPath?

<root> 
    <some_gunk/> 
    <dupe_node> 
     ... 
     stuff I want 
     ... 
    </dupe_node> 
    <bits_and_pieces/> 
    <other_gunk/> 
    <dupe_node> 
     ... 
     stuff I don't want 
     ... 
    </dupe_node> 
    <more_gunk/> 
</root> 

Un XPath del '//dupe_node' me dará dos instancias de dupe_node para jugar. Solo quiero atravesar el primero. ¿Puedo hacer esto con XPath?

Respuesta

39
/descendant::dupe_node[1] 

//dupe_node[1] es generalmente mal, aunque produce un resultado idéntico en este caso particular. See docs:

La ruta de ubicación // para [1] no significa lo mismo que la ruta de ubicación/descendiente :: para [1]. Este último selecciona el primer elemento para para descendiente; el primero selecciona todos los elementos de para descendientes que son los primeros para hijos de sus padres.

Dada la siguiente XML:

<foo> 
    <bar/> 
    <foo> 
     <bar/> 
    </foo> 
</foo> 

//bar[1] producirá dos nodos, ya que ambas barras son los primeros hijos de sus respectivos padres.

/descendant::bar[1] dará un solo nodo, que es la primera de todas las barras en el documento.

+0

Entonces, ¿cómo se escribe si se quiere el primer nodo que sea descendiente o uno mismo?/descendiente :: dupe_node [1] se excluye a sí mismo ¿no? – xr280xr

4

// dupe_node [1]

Cuestiones relacionadas