Gramatyka XPath

XPath używa wyrażenia ścieżki do wybierania węzłów lub zbioru węzłów w dokumencie XML. Węzły są wybierane poprzez ścieżkę (path) lub kroki (steps).

Przykładowy dokument XML

Użyjemy tego dokumentu XML w poniższych przykładach.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

Wybieranie węzłów

XPath używa wyrażenia ścieżki do wybierania węzłów w dokumencie XML. Węzły są wybierane poprzez ścieżkę lub krok.

Poniżej znajdują się najbardziej użyteczne wyrażenia ścieżkowe:

Wyrażenie Opis
nodename Wybierz wszystkie potomki tego węzła.
/ Wybierz węzły od korzenia.
// Wybierz węzły z bieżącego węzła, niezależnie od ich pozycji w dokumencie.
. Wybierz bieżący węzeł.
.. Wybierz rodzica bieżącego węzła.
@ Wybierz atrybut.

Przykład

Poniżej w tabeli przedstawiamy niektóre wyrażenia ścieżkowe oraz ich wyniki:

Wyrażenie ścieżki Wynik
bookstore Wybierz wszystkie potomki elementu bookstore.
/bookstore

Wybierz element korzeni bookstore.

Uwaga: Jeśli ścieżka zaczyna się od znaku slash (/), zawsze reprezentuje ona absolutną ścieżkę do elementu!

bookstore/book Wybierz wszystkie elementy book będące dziećmi elementu bookstore.
//book Wybierz wszystkie potomki book, niezależnie od ich pozycji w dokumencie.
bookstore//book Wybierz wszystkie elementy book będące potomkami elementu bookstore, niezależnie od ich pozycji.
//@lang Wybierz wszystkie atrybuty o nazwie lang.

Predykaty (Predykaty)

Predykaty służą do wyszukiwania konkretnych węzłów lub węzłów zawierających określone wartości.

Predykaty są umieszczone w nawiasach kwadratowych.

Przykład

Poniżej w tabeli przedstawiamy niektóre wyrażenia ścieżkowe z predykatami oraz ich wyniki:

Wyrażenie ścieżki Wynik
/bookstore/book[1] Wybierz pierwszy element book będący dzieckiem elementu bookstore.
/bookstore/book[last()] Wybierz ostatni element book będący dzieckiem elementu bookstore.
/bookstore/book[last()-1] Wybierz drugi ostatni element book będący dzieckiem elementu bookstore.
/bookstore/book[position()<3] Wybierz pierwsze dwa elementy book będące dziećmi elementu bookstore.
//title[@lang] Wybierz wszystkie elementy title, które mają atrybut lang.
//title[@lang='eng'] Wybierz wszystkie elementy title, które mają atrybut lang o wartości eng.
/bookstore/book[price>35.00] Wybierz wszystkie elementy book wewnątrz elementu bookstore, gdzie wartość elementu price musi być większa niż 35.00.
/bookstore/book[price>35.00]/title Wybierz wszystkie elementy title elementu book w elementie bookstore, gdzie wartość elementu price musi być większa niż 35.00.

Wybór nieznanych węzłów

Znak zastępczy XPath można użyć do wybrania nieznanych elementów XML.

Znak zastępczy Opis
* Dopasuj dowolny węzeł elementowy.
@* Dopasuj dowolny węzeł atrybutowy.
node() Dopasuj dowolny typ węzła.

Przykład

Poniżej w tabeli wymieniliśmy niektóre wyrażenia ścieżki oraz ich wyniki:

Wyrażenie ścieżki Wynik
/bookstore/* Wybierz wszystkie podelementy elementu bookstore.
//* Wybierz wszystkie elementy w dokumencie.
//title[@*] Wybierz wszystkie elementy title z atrybutami.

Wybór kilku ścieżek

Poprzez użycie operatora "|" w wyrażeniach ścieżki można wybrać kilka ścieżek.

Przykład

Poniżej w tabeli wymieniliśmy niektóre wyrażenia ścieżki oraz ich wyniki:

Wyrażenie ścieżki Wynik
//book/title | //book/price Wybierz wszystkie elementy title i price elementu book.
//title | //price Wybierz wszystkie elementy title i price w dokumencie.
/bookstore/book/title | //price Wybierz wszystkie elementy title należące do elementu bookstore oraz wszystkie elementy price w dokumencie.