XPath è in grado di eseguire una ricerca di una chiave esterna tra due sottoalberi di un XML?
Domanda
Dire che ho il seguente 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>
... quale sarebbe l'XPath che restituisce che " bucket " contiene " rosso " e " blue " ;?
Soluzione
Se stai usando XSLT, ti consiglio di impostare una chiave:
<xsl:key name="tents" match="base/tent" use="@key" />
È quindi possibile visualizzare <tent>
in <base>
con un key
particolare utilizzando
key('tents', $id)
Quindi puoi farlo
key('tents', /root/bucket/tent/@key)/@color
o, se $bucket
è un particolare <bucket>
elemento,
key('tents', $bucket/tent/@key)/@color
Altri suggerimenti
Penso che funzionerà:
/root/base/tent[/root/bucket/tent/@key = @key ]/@color
Non è carino. Come con qualsiasi ricerca, è necessario utilizzare current ():
/ root / bucket [/ root / base / tent [@key = current () / tent / @ key] / @ color = 'blue' o / root / base / tent [@key = current () / tent / @ key] / @ color = 'red']
JeniT ha la risposta / il codice appropriati elencati qui. È necessario creare la chiave prima di utilizzare il documento XML, quindi eseguire corrispondenze con quella chiave.