2012-02-16 7 views
5

Cómo seleccionar el nodo que tiene un elemento principal con algunos atributos. Por ejemplo, ¿qué es Xpath para seleccionar todos los elementos de expiration_time? En el siguiente XML, obtengo un error si los elementos de los estados tienen atributos, de lo contrario no habrá problemas.Cómo seleccionar el nodo que tiene un elemento principal con algunos atributos

Gracias

<lifecycle> 
    <states elem="0"> 
    <expiration_time at="rib" zing="chack">08</expiration_time> 
    </states> 
    <states elem="1"> 
    <expiration_time at="but">4:52</expiration_time> 
    </states> 
    <states elem="2"> 
    <expiration_time at="ute">05:40:15</expiration_time> 
    </states> 
    <states elem="3"> 
    <expiration_time>00:00:00</expiration_time> 
    </states> 

</lifecycle> 

Respuesta

4

states/expiration_time[../@elem = "0"]?

+0

Esta notación realmente me ayudó a encontrar todos los elementos secundarios (múltiples diferentes) de un padre determinado con un atributo igual a algo. //field[../@id = "FSCHA"] = devolvió todos los elementos de campo cuyo elemento padre tenía un id = FSCHA. Pero //*[../@id = "FSCHA"] devolvió todos los elementos, no solo campos, en el mismo escenario. –

0

Esto le dará a todos los nodos que tienen al menos un atributo

//*[count(./@*) &gt; 0] 
3

Uso:

/*/*/expiration_time 

Esto selecciona todos los expiration_time elementos que son nietos del elemento superior del XML documento.

/*/*[@*]/expiration_time 

esta forma se selecciona ningún elemento expiration_time cuyo padre tiene al menos un atributo y es un hijo del elemento superior del documento XML.

/*/*[not(@*)]/expiration_time 

esta forma se selecciona ningún elemento expiration_time cuyo padre no tiene atributos y es un hijo del elemento superior del documento XML.

/*/*[@elem = '2']/expiration_time 

esta forma se selecciona ningún elemento expiration_time cuyo padre tiene un atributo elem con valor de cadena '2' y que es (el padre) un hijo del elemento superior del documento XML.

+0

+1 Esto me ayudó mucho. Muy buenos ejemplos! – mrt

+0

@mrt, eres bienvenido :) –

Cuestiones relacionadas