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"]

2 komentarze

  1. jaka jest roznica pomiedzy
    //book[@country=’Poland’]
    //book[@country=”Poland'”]
    pierwsze zwraca pusta wartosc drugie znajduje element
    Wydawało mi się z waszego tutriala, że wyrażenia są równoważne?
    Może coś przoeczyłem

    Avatar aaa
    1. Hej,
      W tym drugim przypadku wkradła się literówka w postaci samotnego znaku ' po Poland 😉

      Ale oba poniższe wyrażenia dają taki sam efekt:
      //book[@country=’Poland’]
      //book[@country=”Poland”]

      Pozdrawiam,

      Krzysiek Kijas Krzysiek Kijas

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *