¿Puede XPath realizar una búsqueda de clave externa en dos subárboles de un XML?
Pregunta
Digamos que tengo el siguiente XML ...
<root>
<base>
<tent key="1" color="red"/>
<tent key="2" color="yellow"/>
<tent key="3" color="blue"/>
</base>
<bucket>
<tent key="1"/>
<tent key="3"/>
</bucket>
</root>
... ¿cuál sería el XPath que devuelve que el " bucket " contiene " rojo " y " azul " ;?
Solución
Si está utilizando XSLT, le recomiendo configurar una clave:
<xsl:key name="tents" match="base/tent" use="@key" />
Puede obtener el <tent>
dentro de <base>
con un key
particular usando
key('tents', $id)
Entonces puedes hacer
key('tents', /root/bucket/tent/@key)/@color
o, si $bucket
es un elemento <bucket>
particular,
key('tents', $bucket/tent/@key)/@color
Otros consejos
Creo que esto funcionará:
/root/base/tent[/root/bucket/tent/@key = @key ]/@color
No es bonito. Como con cualquier búsqueda, debe usar current ():
/ root / bucket [/ root / base / tent [@key = current () / tent / @ key] / @ color = 'blue' o / root / base / tent [@key = current () / tent / @ clave] / @ color = 'rojo']
JeniT tiene la respuesta / código apropiado enumerado aquí. Debe crear la clave antes de recorrer el documento XML, luego realizar coincidencias con esa clave.