Ich habe folgendes Dokument:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Wie kann ich den Wert der <cc>
Verwendung von XPath ermitteln, wenn dies der Fall <bb>
ist zz
?
Ich habe folgendes Dokument:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Wie kann ich den Wert der <cc>
Verwendung von XPath ermitteln, wenn dies der Fall <bb>
ist zz
?
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/>
:
//a[bb/text() = "zz"]/cc/text()
*-sibling
Achse verwendet. +1 obwohl.
Was Sie brauchen, ist die following-sibling
XPath-Achse
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Testen Sie den Xpath hier: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
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 Kind bb
mit Wert hat 'zz'
:
//cc[../bb='zz']
//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:
//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.
//a/cc[../bb='zz']/text()
// 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.
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, um bb
dann zum übergeordneten Knoten dieser zu bb
wechseln ..
, nachdem wir auf den cc
so zurückgegebenen Text zugreifen können .
Ich hoffe, dass die Erklärung nicht komplex ist.