Das Problem ist, dass ich weiß, wie man auf einen bestimmten Knoten zugreift, aber ich habe keine Ahnung, auf einen Knoten zuzugreifen, wenn ein Geschwister einen bestimmten Wert hat. Kann es so etwas sein, das / a / cc / enthält (/ a / bb = 'zz')?
HOE SENGKIANG
Antworten:
96
Sie sind sich nicht sicher, warum alle nach Geschwistern fragen. Sie können auch nach <bb/>Elementen suchen, die mit dem Prädikat des Prädikats übereinstimmen <a/>:
@HOESENGKIANG: Sie sollten auf das Häkchen klicken, um diese Antwort zu "akzeptieren", oder je nachdem, was Ihrer Meinung nach die Frage am besten beantwortet.
LarsH
22
F: Wie wähle ich einen Knoten mit XPath aus, wenn der Geschwisterknoten einen bestimmten Wert hat?
Da es nur "XPath-Achsen" für Folgeschwister und Vorgeschwister gibt, können Sie eine davon verwenden, wenn die Position festgelegt ist.
Aber besser:
Suchen Sie, wo ccder Elternteil ein Kind bbmit Wert hat 'zz':
Ich bin mir nicht sicher, was Sie unter "nur" XPath-Achsen "für Nachgeschwister und Vorgeschwister" verstehen. Beziehen Sie sich auf die Tatsache, dass es keine einzige Achse für alle Geschwister gibt?
LarsH
@LarsH: Ja, sorry, (entschuldigen Sie mein schlechtes Englisch :-() - das wollte ich sagen. (Weil die Frage für Geschwister war.)
hr_117
6
Zunächst einmal ist Ihr Beispiel kein wohlgeformtes XML. Mit Blick darauf und dass Sie Ihre Absichten nicht sehr gut beschrieben haben (Was genau möchten Sie unter welchen Bedingungen auswählen?), Nehme ich an, dass Sie dies tun möchten:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Es wählt aus
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
Man könnte auch schreiben wie
//bb[text()="zz"]/following-sibling::cc/text()
Bitte schauen Sie sich die Spezifikation an , sie enthält einige sehr gut lesbare Beispiele, aus denen Sie viel lernen werden.
Erläuterung : Alle bb, die 'zz'Zeichenfolgen in allen untergeordneten Knoten enthalten, um bbdann zum übergeordneten Knoten dieser zu bbwechseln .., nachdem wir auf den ccso zurückgegebenen Text zugreifen können .
Antworten:
Sie sind sich nicht sicher, warum alle nach Geschwistern fragen. Sie können auch nach
<bb/>
Elementen suchen, die mit dem Prädikat des Prädikats übereinstimmen<a/>
:quelle
*-sibling
Achse verwendet. +1 obwohl.Was Sie brauchen, ist die
following-sibling
XPath-AchseTesten Sie den Xpath hier: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
quelle
F: Wie wähle ich einen Knoten mit XPath aus, wenn der Geschwisterknoten einen bestimmten Wert hat?
Da es nur "XPath-Achsen" für Folgeschwister und Vorgeschwister gibt, können Sie eine davon verwenden, wenn die Position festgelegt ist.
Aber besser: Suchen Sie, wo
cc
der Elternteil ein Kindbb
mit Wert hat'zz'
:quelle
//a[bb = 'zz']/cc
.Zunächst einmal ist Ihr Beispiel kein wohlgeformtes XML. Mit Blick darauf und dass Sie Ihre Absichten nicht sehr gut beschrieben haben (Was genau möchten Sie unter welchen Bedingungen auswählen?), Nehme ich an, dass Sie dies tun möchten:
Es wählt aus
Man könnte auch schreiben wie
Bitte schauen Sie sich die Spezifikation an , sie enthält einige sehr gut lesbare Beispiele, aus denen Sie viel lernen werden.
quelle
// a: Wählt alle 'a'-Elemente aus, egal wo sie sich befinden.
// a / cc: Wählt 'cc'-Elemente aus, die Kinder des' a'-Elements sind (egal wo a ist).
..: Wählt das übergeordnete Element des aktuellen Knotens aus.
[../bb='zz ']: wobei der Wert des Geschwisterelements' bb 'zz ist.
Referenz: http://www.w3schools.com/xsl/xpath_syntax.asp
quelle
Eine andere Lösung für dieses Problem ist
//bb[contains(.,'zz')]/../cc/text()
Erläuterung : Alle
bb
, die'zz'
Zeichenfolgen in allen untergeordneten Knoten enthalten, umbb
dann zum übergeordneten Knoten dieser zubb
wechseln..
, nachdem wir auf dencc
so zurückgegebenen Text zugreifen können .Ich hoffe, dass die Erklärung nicht komplex ist.
quelle