Dlaczego wszyscy patrzą na atrybut „prop”? Przegapiłem coś? Mówi tylko, że pobierz pierwsze trzy węzły.
6
Wszyscy patrzą na atrybut rekwizytu, ponieważ o to pytano. Pobierz wszystkie węzły, w których prop zawiera „Foo”. Dodaj <a prop="Foo5" />, a zobaczysz, dlaczego nie chodzi tylko o „pierwsze trzy węzły”…
erlando,
Pytanie w treści jest słabo sformułowane, niezależnie od tytułu. Czy foo naprawdę może znajdować się w dowolnym atrybucie właściwości, czy naprawdę chcesz tylko pierwszych trzech węzłów?
3
Tak, zapoznaj się z tytułem (i nie krępuj się edytować).
Edycja: Inną rzeczą wartą uwagi jest to, że chociaż XPath powyżej zwróci poprawną odpowiedź dla tego konkretnego xml, jeśli chcesz zagwarantować, że otrzymasz tylko elementy "a" w elemencie "bla", powinieneś, tak jak inni wspominali, również użyć
/bla/a[contains(@prop,'Foo')]
Spowoduje to przeszukanie wszystkich elementów „a” w całym dokumencie xml, niezależnie od tego, czy są one zagnieżdżone w elemencie „blah”
//a[contains(@prop,'Foo')]
Dodałem to ze względu na dokładność i w duchu przepełnienia stosu. :)
Oś - przeszukaj każdy węzeł pod spodem i sam węzeł. Często lepiej to powiedzieć niż //. Spotkałem kilka implementacji, w których // oznacza gdziekolwiek (decendant lub self z węzła głównego). Inne używają domyślnej osi.
* or /bla/a
Tag - dopasowanie wieloznaczne, a / bla / a to ścieżka bezwzględna.
[contains(@prop,'Foo')] or [position() <= 3]
Stan w []. @prop jest skrótem od attribute :: prop, ponieważ atrybut to kolejna oś wyszukiwania. Alternatywnie możesz wybrać pierwsze 3 za pomocą funkcji position ().
Odpowiedzi:
Działa, jeśli użyję tego XML do odzyskania wyników.
Edycja: Inną rzeczą wartą uwagi jest to, że chociaż XPath powyżej zwróci poprawną odpowiedź dla tego konkretnego xml, jeśli chcesz zagwarantować, że otrzymasz tylko elementy "a" w elemencie "bla", powinieneś, tak jak inni wspominali, również użyć
Spowoduje to przeszukanie wszystkich elementów „a” w całym dokumencie xml, niezależnie od tego, czy są one zagnieżdżone w elemencie „blah”
Dodałem to ze względu na dokładność i w duchu przepełnienia stosu. :)
źródło
xmlme.com
teraz przekierowuje do innego hosta i nie wydaje się hostować narzędzia ani niczego podobnego.Ta XPath da ci wszystkie węzły, które mają atrybuty zawierające „Foo”, niezależnie od nazwy węzła lub nazwy atrybutu:
Oczywiście, jeśli bardziej interesuje Cię zawartość samego atrybutu, a niekoniecznie jego węzeł nadrzędny, po prostu upuść / ..
źródło
//@*[contains(., 'Foo')]
Lub:
Lub:
Rozcięto:
Oś - przeszukaj każdy węzeł pod spodem i sam węzeł. Często lepiej to powiedzieć niż //. Spotkałem kilka implementacji, w których // oznacza gdziekolwiek (decendant lub self z węzła głównego). Inne używają domyślnej osi.
Tag - dopasowanie wieloznaczne, a / bla / a to ścieżka bezwzględna.
Stan w []. @prop jest skrótem od attribute :: prop, ponieważ atrybut to kolejna oś wyszukiwania. Alternatywnie możesz wybrać pierwsze 3 za pomocą funkcji position ().
źródło
John C jest najbliższy, ale XPath rozróżnia wielkość liter, więc poprawna XPath to:
źródło
Czy próbowałeś czegoś takiego:
// a [zawiera (@prop, "Foo")]
Nigdy wcześniej nie korzystałem z funkcji zawiera, ale podejrzewam, że powinna działać zgodnie z reklamą ...
źródło
Jeśli chcesz również dopasować treść samego linku, użyj text ():
//a[contains(@href,"/some_link")][text()="Click here"]
źródło
/ bla / a [zawiera (@prop, "foo")]
źródło
Dla powyższego kodu ... // * [zawiera (@ prop, 'foo')]
źródło
Spróbuj tego:
// a [zawiera (@ prop, 'foo')]
to powinno działać dla wszystkich znaczników „a” w dokumencie
źródło