XPath – Zadania, część 2 – Predykaty

Jest to druga część z cyklu XPath – Zadania, który ma na celu przetestować Twoją wiedzę z zakresu wyrażeń XPath na różnych przykładach.

Zadania tu zebrane dotyczą głównie predykatów, ale bazują też na wyrażeniach poruszonych w poprzednich częściach. XML, na którym bazują zadania, wraz z aplikacją pozwalającą na testy wyrażeń XPath, dostępny jest pod adresem XPath Playground. Teraz, gdy mamy już wszystkie narzędzia gotowe możemy przystąpić do rozwiązywania zadań…

Zatem do dzieła! 🙂

P.S. Ściąga z wyrażeń XPath dostępna jest na stronie XPath cheat sheet 😉

Zadanie 1 – Predykaty i wyszukiwanie danego elementu z listy

Znajdź pierwszy element (węzły, ang. nodes) typu book, który należy do listy znajdującej się w shelves.

Oczekiwany wynik

      Dune
      Frank Herbert
      1965
      45.00

Podpowiedź
W XPath można używać operatora [2], który podobnie jak w programowaniu wskazuje na element listy.
Rozwiązanie
//shelves/book[1]

Zadanie 2 – Predykaty i wyszukiwanie danego elementu z listy

Znajdź ostatni element (węzły, ang. nodes) typu book, który należy do listy znajdującej się w shelves. Załóż, że nie wiadomo ile elementów jest na liście.

Oczekiwany wynik

      The Dark Tower II: The Drawing of the Three
      Stephen King
      1982
      30.00

Podpowiedź
W rozwiązaniu możesz wykorzystać funkcję last().
Rozwiązanie
//shelves/book[last()]

Zadanie 3 – Predykaty i atrybuty

Znajdź elementy (węzły, ang. nodes) typu book, które mają atrybut country.

Oczekiwany wynik

      The Lord of the Rings
      J. R. R. Tolkien
      1954
      45.00
,

      Perfekcyjna Niedoskonałość
      Jacek Dukaj
      2004
      35.00

Podpowiedź
Rozwiązanie będzie zawierało połączenie operatora [] oraz atrybutu @country.
Rozwiązanie
//book[@country]

Zadanie 4 – Predykaty i konkretne wartości atrybutów

Znajdź elementy (węzły, ang. nodes) typu book, które mają atrybut country o wartości Poland.

Oczekiwany wynik

      Perfekcyjna Niedoskonałość
      Jacek Dukaj
      2004
      35.00

Podpowiedź
Rozwiązanie będzie zawierało połączenie operatora [] oraz atrybutu @country.
Rozwiązanie
//book[@country="Poland"]

Zadanie 5 – Predykaty i konkretne wartości węzłów

Znajdź elementy (węzły, ang. nodes) typu book, które mają atrybut country o wartości Poland. Na końcu wyświetl tylko wartości pól title.

Oczekiwany wynik
Perfekcyjna Niedoskonałość
Podpowiedź 1
Rozwiązanie będzie zawierało połączenie operatora [] oraz atrybutu @country.
Podpowiedź 2
Do wyświetlenia wartości węzła służyła funkcja text().
Rozwiązanie
//book[@country="Poland"]/title/text()

Zadanie 6 – Predykaty i warunki

Znajdź elementy (węzły, ang. nodes) typu book, które zostały wydane po roku 2000 (czyli mają wartość węzła year większa niż 2000).

Oczekiwany wynik

      Perfekcyjna Niedoskonałość
      Jacek Dukaj
      2004
      35.00
   ,

         In the miso soup
         Ryū Murakami
         2005
         100.00

Podpowiedź 1
Rozwiązanie będzie zawierało połączenie operatora [] oraz nazwy elementu year.
Podpowiedź 2
Do określania relacji mniejszy/większy/równy stosuje się klasyczne konstrukcje year > 2000.
Rozwiązanie
//book[year > 2000]

Zadanie 7 – Predykaty i warunki

Znajdź elementy (węzły, ang. nodes) typu book, które zostały wydane po roku 2000 i przed rokiem 2005.

Oczekiwany wynik

      Perfekcyjna Niedoskonałość
      Jacek Dukaj
      2004
      35.00

Podpowiedź 1
Rozwiązanie będzie zawierało połączenie operatora [] oraz nazwy elementu year.
Podpowiedź 2
Do łączenia wielu warunków służą słowa kluczowe and oraz or.
Rozwiązanie
//book[year > 2000 and year < 2005]

Zadanie 8 – Predykaty i warunki

Znajdź elementy (węzły, ang. nodes) typu book, których wartość elementu title jest równa Dune.

Oczekiwany wynik

         Dune
         Frank Herbert
         1965
         45.00
      
Podpowiedź
Rozwiązanie będzie zawierało połączenie operatora [] oraz nazwy elementu title.
Rozwiązanie
//book[title="Dune"]

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *