Kann XPath über zwei Unterstrukturen eines XML einen Fremdschlüssel Lookup tun?
Frage
Sagen, dass ich die folgende XML haben ...
<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>
... was wäre der XPath, dass gibt, dass die „Eimer“ enthalten „Rot“ und „Blau“?
Lösung
Wenn Sie XSLT verwenden, würde ich empfehlen, einen Schlüssel einrichten:
<xsl:key name="tents" match="base/tent" use="@key" />
Sie können dann die <tent>
innerhalb <base>
mit einem bestimmten key
erhalten mit
key('tents', $id)
Dann können Sie tun
key('tents', /root/bucket/tent/@key)/@color
oder, wenn $bucket
ist ein besonderes <bucket>
Element,
key('tents', $bucket/tent/@key)/@color
Andere Tipps
Ich denke, das funktioniert:
/root/base/tent[/root/bucket/tent/@key = @key ]/@color
Es ist nicht schön. Wie bei jeder Lookup, müssen Sie Strom () verwenden:
/ root / bucket [/ root / base / Zelt [@key = current () / Zelt / @ key] / @ color = 'blau' oder / root / base / Zelt [@key = current () / Zelt / @ key] / @ color = 'rot']
JeniT hat die entsprechende Antwort / code hier aufgeführt. Sie müssen den Schlüssel erstellen, bevor Sie das XML-Dokument gehen, dann Streichhölzer führen gegen diese Schlüssel.