2010-09-21 16 views
5

Me gustaría encontrar el valor de un elemento que coincida con el atributo id para el que solo tengo el ref: el bit con #, el delimitador.Xpath: encuentre un valor de elemento de una coincidencia del atributo id con el identificador id

Busco el valor de PartyID:

< party id="partyA" > 
    <partyId>THEID</partyId> 

Pero para llegar allí sólo tienen el href de la siguiente

<MyData> 
    < MyReference href="#partyA" /> 

de Gaza el signo # no se ve bien para mí.

¿Alguna pista?

+1

Buena pregunta (+1). Ver mi respuesta para dos soluciones posibles :) –

Respuesta

4

Como no ha proporcionado documentos XML completos, tengo que usar //, una práctica que recomiendo evitar.

Supongamos que

$vDataRef

se define como

//MyData/MyReference/@href

y su valor de cadena es "#partyA", entonces una posible expresión XPath que selecciona el nodo deseada es:

//party[@id=substring($vDataRef,2)] 

En caso de que el documento XML tiene una DTD en el que se define el atributo id de party a ser de tipo ID, entonces es más conveniente y eficiente para utilizar la función estándar XPath id():

id(substring($vDataRef,2)) 
0

Asumiendo que tiene su identificación como una variable ya (digamos $ myId), a continuación, tratar de usar:

//party[contains($myId, @id)] 

El contains() function se verá a ver en cada nodo coincidente si el attibut PartyID está en teh valor que se pasa en

alternativa (ya que ello podría considerarse 'chungo'), que puede probar:.

//party[@id=substring($myId, 2, 1 div 0)] 

el substring() function debe ser un poco más preciso.

+0

Está bien usar p/2 'fn: substring()', no necesita esa expresión 'INF'. –

Cuestiones relacionadas