2012-04-20 18 views
93

Mit XPath kann ich jede Kategorie mit einem angegebenen Namensattribut und einem beliebigen Kindknotenautor mit dem angegebenen Wert auswählen.XPath mit mehreren Bedingungen

Ich habe verschiedene Varianten des Weges versuchte unten ohne Erfolg:

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

Die 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> 

Antwort

154

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

+0

Für Anhänger, die Fehlermeldung "erwartet, aber gefunden: &&" bedeutete "Verwenden Sie die und Schlüsselwort anstelle von &&" (wie diese Antwort angibt) – rogerdpack

11

Frage ist nicht klar, aber Was ich verstehe, müssen Sie eine Kategorie auswählen, die Namensattribut und sollte Kind Autor mit Wert angegeben haben, korrigieren ich, wenn ich worng

hier ist ein XPath

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

Verwendung:

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

oder -nutzung:

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

Es ist eine gute Regel, um zu versuchen zu vermeiden Verwenden Sie den Pseudooperator // wann immer möglich, weil seine Bewertung ca in der Regel sehr langsam sein.

auch:

./somename 

entspricht:

somename 

so ist es diese zu verwenden empfohlen.