Can XPath fazer uma pesquisa de chave estrangeira em dois sub-árvores de um XML?
Pergunta
Say Eu tenho o seguinte 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>
... o que o XPath ser que os retornos que o "balde" contém "vermelho" e "azul"?
Solução
Se você estiver usando XSLT, eu recomendo a criação de uma chave:
<xsl:key name="tents" match="base/tent" use="@key" />
Você pode então começar a <tent>
dentro <base>
com um key
particular usando
key('tents', $id)
Em seguida, você pode fazer
key('tents', /root/bucket/tent/@key)/@color
ou, se $bucket
é um elemento <bucket>
particular,
key('tents', $bucket/tent/@key)/@color
Outras dicas
Eu acho que isso vai funcionar:
/root/base/tent[/root/bucket/tent/@key = @key ]/@color
Não é bonito. Como acontece com qualquer pesquisa, você precisa usar atual ():
/ root / balde [/ root / base / tenda [@key = current () / tenda / @ key] / @ color = 'azul' ou / root / base / tenda [@key = current () / tenda / @ key] / @ color = 'vermelho']
JeniT tem a resposta / código apropriado aqui. Você precisa criar a chave antes que você ande o documento XML, em seguida, executar jogos contra essa chave.