XPath mit mehreren Bedingungen

156

Mit welchem ​​XPath kann ich eine Kategorie mit einem angegebenen Namensattribut und einen untergeordneten Knotenautor mit dem angegebenen Wert auswählen?

Ich habe verschiedene Variationen des folgenden Pfades ohne Erfolg ausprobiert:

//quotes/category[@name='Sport' and author="James Small"]

Das XML:

<?xml version="1.0" encoding="utf-8"?>
<quotes>
  <category name="Sport">
   <author>James Small<quote date="09/02/1985">Quote One</quote><quote             date="11/02/1925">Quote nine</quote></author>
  </category>
   <category name="Music">
   <author>Stephen Swann
 <quote date="04/08/1972">Quote eleven</quote></author>
  </category>
  </quotes>
mjroodt
quelle

Antworten:

248

Versuchen:
//category[@name='Sport' and ./author/text()='James Small']

Cylian
quelle
4
Für Follower bedeutete die Fehlermeldung "Erwartet], aber gefunden: &&" "Verwenden Sie das Schlüsselwort und anstelle von &&" (wie in dieser Antwort angegeben)
Rogerdpack
31

Verwendung :

/category[@name='Sport' and author/text()[1]='James Small']

oder verwenden:

/category[@name='Sport' and author[starts-with(.,'James Small')]]

Es ist eine gute Regel, zu versuchen, die Verwendung des //Pseudooperators nach Möglichkeit zu vermeiden , da seine Auswertung normalerweise sehr langsam sein kann.

Ebenfalls:

./somename

ist äquivalent zu:

somename

Daher wird empfohlen, letzteres zu verwenden.

Dimitre Novatchev
quelle
14

Die Frage ist nicht klar, aber was ich verstehe, ist, dass Sie eine Kategorie auswählen müssen, die ein Namensattribut hat und einen untergeordneten Autor mit einem angegebenen Wert haben sollte. Korrigieren Sie mich, wenn ich abgenutzt bin

Hier ist ein xpath

//category[@name='Required value'][./author[contains(.,'Required value')]]
e.g
//category[@name='Sport'][./author[contains(.,'James Small')]]
akhter wahab
quelle
1

Sie können mehrere Bedingungen in xpath mit und, oder anwenden

//input[@class='_2zrpKA _1dBPDZ' and @type='text']

//input[@class='_2zrpKA _1dBPDZ' or @type='text']
Suman
quelle
-1

Hier können wir auch so vorgehen:

//category [@name='category name']/author[contains(text(),'authorname')]

ODER

//category [@name='category name']//author[contains(text(),'authorname')]

Um XPATH im Detail zu lernen, besuchen Sie bitte Selen xpath im Detail

Avinash Pande
quelle