Ich brauche den übergeordneten Knoten für den untergeordneten Knoten title 50
Im Moment benutze ich nur
//*[title="50"]
Wie könnte ich seine Eltern bekommen? Ergebnis sollte der store
Knoten sein.
<?xml version="1.0" encoding="utf-8"?>
<d:data xmlns:d="defiant-namespace" d:mi="23">
<store d:mi="22">
<book price="12.99" d:price="Number" d:mi="4">
<title d:constr="String" d:mi="1">Sword of Honour</title>
<category d:constr="String" d:mi="2">fiction</category>
<author d:constr="String" d:mi="3">Evelyn Waugh</author>
</book>
<book price="8.99" d:price="Number" d:mi="9">
<title d:constr="String" d:mi="5">Moby Dick</title>
<category d:constr="String" d:mi="6">fiction</category>
<author d:constr="String" d:mi="7">Herman Melville</author>
<isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
</book>
<book price="8.95" d:price="Number" d:mi="13">
<title d:constr="String" d:mi="10">50</title>
<category d:constr="String" d:mi="11">reference</category>
<author d:constr="String" d:mi="12">Nigel Rees</author>
</book>
<book price="22.99" d:price="Number" d:mi="18">
<title d:constr="String" d:mi="14">The Lord of the Rings</title>
<category d:constr="String" d:mi="15">fiction</category>
<author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
<isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
</book>
<bicycle price="19.95" d:price="Number" d:mi="21">
<brand d:constr="String" d:mi="19">Cannondale</brand>
<color d:constr="String" d:mi="20">red</color>
</bicycle>
</store>
</d:data>
parent::*
abgekürzte Syntax..
(Beispiel://*[title="50"]/..
) oder eine verschachtelte Prädikat (Beispiel://*[*[title="50"]]
)parent::node()
was der Abkürzung entspricht..
und meiner Meinung nach besser ist. Tatsächlichparent::*
ist es auf den Hauptknotentyp der Achse beschränkt, was in den meisten Fällen kein Problem darstellt..xpath('..')
oderxpath('parent::node()')
bicycle
aber der Elternteil des Elternteils iststore
? Steigt es auf? Wenn nicht, gibt es in solchen Fällen eine Methode zum Aufstieg und zur Rückkehr,None
wenn es keinen solchen Elternteil gibt?Nur als Alternative können Sie verwenden
ancestor
.Es ist mächtiger als
parent
da es sogar die Großeltern oder Ururgroßeltern bekommen kannquelle
Sie können auch die beiden Punkte am Ende des Ausdrucks verwenden. Siehe dieses Beispiel:
quelle
Neue, verbesserte Antwort auf eine alte, häufig gestellte Frage ...
Verwenden Sie ein Prädikat anstelle der Achse
parent::
oderancestor::
Bei den meisten Antworten wird hier das Element ausgewählt
title
und anschließend zum Zielelement für Eltern oder Vorfahren (store
) weitergeleitet. Ein einfacherer, direkter Ansatz besteht darin, das übergeordnete Element oder das Vorfahrselement direkt auszuwählen, ohne dass eineparent::
oder mehrereancestor::
Achsen durchlaufen werden müssen :Sollten die dazwischenliegenden Elemente im Namen variieren:
Oder in Name und Tiefe:
quelle
Das funktioniert in meinem Fall. Ich hoffe, Sie können daraus einen Sinn ziehen.
quelle