XPath – Zadania, część 3 – Nieznane elementy

Jest to trzecia 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 nieznanych typów elementó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 – Nieznane elementy

Znajdź wszystkie tytuły elementów (węzły, ang. nodes), które znajdują się w shelves.

Oczekiwany wynik
Dune,
The Lord of the Rings,
Forrest Gump,
Perfekcyjna Niedoskonałość,
Robot Bob,
The Dark Tower: The Gunslinger,
The Dark Tower II: The Drawing of the Three,
How to program stuff
Podpowiedź
Do znajdowania dowolnego węzła służy operator *.
Rozwiązanie
//shelves/*/title

Zadanie 2 – Nieznane elementy

Znajdź wszystkie elementy (węzły, ang. nodes), które znajdują się w pierwszym elemencie typu book w shelves.

Oczekiwany wynik
Dune,
Frank Herbert,
1965,
45.00
Podpowiedź 1
Do znajdowania dowolnego węzła służy operator *.
Podpowiedź 2
Do znajdowania danego elementu listy służy operator [].
Rozwiązanie
//shelves/book[1]/*

Zadanie 3 – Nieznane elementy

Znajdź pierwszy element (węzły, ang. nodes), który znajduje się w pierwszym elemencie typu book w shelves.

Oczekiwany wynik
Dune
Podpowiedź 1
Do znajdowania dowolnego węzła służy operator *.
Podpowiedź 2
Do znajdowania danego elementu listy służy operator [].
Rozwiązanie
//shelves/book[1]/*[1]

Zadanie 4 – Nieznane atrybuty

Znajdź wartości wszystkich atrybutów, jakie znajdują się w pierwszym elemencie typu book w shelves.

Oczekiwany wynik
sci-fi
Podpowiedź 1
Do znajdowania dowolnego węzła lub atrybutu służy operator *.
Podpowiedź 2
Do znajdowania danego elementu listy służy operator [].
Podpowiedź 3
Do znajdowania wartości atrybutu służy operator @.
Rozwiązanie
//shelves/book[1]/@*

Zadanie 5 – Nieznane atrybuty i predykaty

Znajdź wszystkie elementy typu title, które mają dowolny atrybut równy wartości en.

Oczekiwany wynik
Dune,
The Lord of the Rings,
Forrest Gump,
The Dark Tower: The Gunslinger,
The Dark Tower II: The Drawing of the Three,
How to program stuff,
The Shining,
How to program other stuff,
In the miso soup,
The Wind-Up Bird Chronicle,
How to prepare your garden for Eternal Autumn,
Heavy matter
Podpowiedź 1
Do znajdowania dowolnego węzła lub atrybutu służy operator *.
Podpowiedź 2
Do znajdowania danego elementu listy służy operator [].
Podpowiedź 3
Do znajdowania wartości atrybutu służy operator @.
Rozwiązanie
//title[@*='en']

Zadanie 6 – Nieznane atrybuty i predykaty

Znajdź wszystkie elementy, jakie znajdują się w elemencie typu shelves, które mają dowolny atrybut równy wartości en.

Oczekiwany wynik
Dune,
The Lord of the Rings,
Forrest Gump,
The Dark Tower: The Gunslinger,
The Dark Tower II: The Drawing of the Three,
How to program stuff
Podpowiedź 1
Do znajdowania dowolnego węzła lub atrybutu służy operator *.
Podpowiedź 2
Do znajdowania danego elementu listy służy operator [].
Podpowiedź 3
Do znajdowania wartości atrybutu służy operator @.
Rozwiązanie
//shelves//*[@*='en']

Zadanie 7 – Nieznane elementy i predykaty

Znajdź wszystkie elementy, jakie znajdują się w elemencie typu shelves, które mają wartość title równą Dune.

Oczekiwany wynik

         Dune
         Frank Herbert
         1965
         45.00
      
Podpowiedź 1
Do znajdowania dowolnego węzła lub atrybutu służy operator *.
Rozwiązanie
//shelves//*[title='Dune']

Zadanie 8 – Nieznane elementy i predykaty

Znajdź wszystkie elementy, jakie znajdują się w elemencie typu shelves, które mają wartość year większą niż 1990.

Oczekiwany wynik

         Perfekcyjna Niedoskonałość
         Jacek Dukaj
         2004
         35.00
      ,

         Robot Bob
         Jacek Doe
         2000
         15.00
      ,

         How to program stuff
         John Doe
         1991
         10.00
      
Podpowiedź 1
Do znajdowania dowolnego węzła lub atrybutu służy operator *.
Rozwiązanie
//shelves//*[year > 1990]

3 komentarze

    1. Hej,
      Wyrażenie //shelves/*/title zwróci tytuły zawarte w następujących ścieżkach np:
      //shelves/a/title
      //shelves/b/title

      Natomiast wyrażenie //shelves//title zwróci tytuły zawarte w następujących ścieżkach np:
      //shelves/a/title
      //shelves/b/title
      //shelves/b/c/title
      //shelves/b/c/d/title

      Czyli /*/ pozwoli na “przeskoczenie” jednego dowolnego węzła, natomiast // na przeskoczenie dowolnej liczby węzłów 😉
      Pozdrawiam,

      Krzysiek Kijas Krzysiek Kijas

Dodaj komentarz

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