XPath – Wikipedia, wolna encyklopedia
XPath (ang. XML Path Language, w wolnym tłumaczeniu Język ścieżek XML, Język ścieżek rozszerzalnego języka znaczników) – język służący do adresowania części dokumentu XML.
XPath został oryginalnie zaprojektowany dla XSLT i XPointer, ale znajduje zastosowanie także w DOM oraz językach bazujących na XML, np. XQuery, XUL.
Budowa wyrażeń
[edytuj | edytuj kod]Do wskazania w XPath węzła lub zbioru węzłów używa się ścieżki lokalizacji. Ścieżka ta z kolei składa się z jednego lub więcej kroków lokalizacji oddzielanych od siebie znakami / lub //. Jeśli ścieżka zaczyna się od „/”, nazywamy ją ścieżką bezwzględną, gdyż całą ścieżkę podaje się względem węzła głównego. W przeciwnym wypadku ścieżkę nazywamy względną, zaczyna się ona od bieżącego węzła nazywanego węzłem kontekstowym.
Krok lokalizacji składa się z osi, badania węzła oraz zera lub więcej predykatów. Jeśli np. wyrażenie ma postać
child::n:Kontakt[position()=2]
nazwą osi jest
, badanie węzła to wyrażenie: child
n:Kontakt
natomiast zapis:
[position()=2]
to predykat. Ścieżki lokalizacji składać się mogą z jednego lub więcej kroków lokalizacji, np.
/descendant::n:Adresy/child::n:Adres
wybiera elementy n:Adres mające rodzica n:Adresy.
Osie XPath
[edytuj | edytuj kod]Oś to kolekcja węzłów lub atrybutów o określonym pokrewieństwie wobec węzła kontekstowego.
Oś | Znaczenie |
---|---|
| dotyczy przodków węzła kontekstowego. Przodkami są rodzice węzła kontekstowego, rodzice tych rodziców itd., aż po węzeł główny włącznie |
| dotyczy węzła kontekstowego i jego przodków |
| dotyczy atrybutów węzła kontekstowego |
| dotyczy dzieci węzła kontekstowego |
| dotyczy potomków węzła kontekstowego. Potomek to dziecko, dziecko dziecka itd. |
| dotyczy węzła kontekstowego i jego potomków |
| dotyczy wszystkich węzłów z dokumentu, do którego należy węzeł kontekstu, które znajdują się po nim |
| dotyczy wszystkich węzłów znajdujących się na tym samym poziomie co węzeł kontekstu, za tym węzłem |
| dotyczy węzłów przestrzeni nazw węzła kontekstu |
| dotyczy węzła rodzica węzła kontekstowego |
| dotyczy wszystkich węzłów z dokumentu, do którego należy węzeł kontekstu, które znajdują się przed nim |
| dotyczy wszystkich węzłów znajdujących się na tym samym poziomie co węzeł kontekstu, przed tym węzłem |
| zawiera węzeł kontekstowy |
Badanie węzłów w XPath
[edytuj | edytuj kod]Jako testów węzłów można użyć nazw węzłów, można też uzyć znaku „*” do wybrania wszystkich elementów. Np. wyrażenie:
child::*/child::n:Email
powoduje wybranie elementów n:Email będących „wnukami” węzła kontekstu. Można też użyć innych testów:
Test węzła | Znaczenie |
---|---|
| wybiera węzły komentarzy |
| wybiera węzły dowolnego typu |
| wybiera węzły instrukcji przetwarzania, w nawiasach można podać także nazwę instrukcji |
| wybiera węzły tekstowe |
Predykaty XPath
[edytuj | edytuj kod]Predykaty zawierają wyrażenia XPath. Aby otoczyć predykat i przetestować to, czy występuje określony warunek, można użyć operatora „[]”. Można na przykład przestować:
- wartość atrybutu w danym łańcuchu
- wartość elementu
- to czy element zawiera określone „dziecko”, atrybut lub inny element
- pozycję węzła w drzewie
W predykatach można użyć dowolnego rodzaju typu wyrażeń:
- zbiory węzłów
- logiczne
- liczbowe
- tekstowe
- wynikowe fragmenty drzew
Zbiory węzłów XPath
[edytuj | edytuj kod]Zbiór węzłów – jak wskazuje sama nazwa – to po prostu zbiór węzłów. Wyrażenie takie jak
n:Zainteresowania
zwraca zbiór węzłów elementów n:Zainteresowania.
Wyrażenie:
child::n:Zainteresowania/child::n:Zainteresowanie
zwraca listę węzłów elementów n:Zainteresowanie będących dziećmi elementów n:Zainteresowania. Do wybrania ze zbioru węzła lub węzłów można użyć różnych funkcji używanych w predykatach.
Funkcje XPath
[edytuj | edytuj kod]Funkcja | Znaczenie |
---|---|
| zwraca liczbę węzłów w zbiorze |
| zwraca położenie węzła kontekstowego w zbiorze węzła kontekstowego |
| zwraca liczbę węzłów w przekazanym zbiorze. Jeśli argument nie zostanie podany, zliczone zostaną węzły zbioru węzła kontekstowego |
| zwraca adres URI przestrzeni nazw pierwszego węzła ze zbioru. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
| zwraca pełną kwalifikowaną nazwę pierwszego węzła ze zbioru. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
| zwraca nazwę lokalną pierwszego węzła ze zbioru węzłów. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
Wyrażenia logiczne XPath
[edytuj | edytuj kod]W wyrażeniach XPath można używać także wyrażeń logicznych. Liczba uważana jest za fałsz, jeśli jest równa zeru i uważana za prawdę w każdym innym przypadku. Napis pusty
uważany jest za fałsz, wszystkie inne napisy odpowiadają prawdzie. ()
Operatory logiczne XPath umożliwiają wyliczenie wartości typu prawda-fałsz:
Operator | Znaczenie |
---|---|
!= | różne |
< | mniejsze |
<= | mniejsze bądź równe |
= | równe (w odróżnieniu od podwójnego znaku równości == w wielu językach programowania) |
> | większe |
>= | większe bądź równe |
Poszczególne elementy wyrażenia logicznego łączyć można spójnikami and i or, podobnie jak w JavaScripcie i Javie.
Istnieją też funkcje true() i false() zwracające zawsze wartości odpowiednio prawdy i fałszu, a funkcji not() można użyć do odwrócenia logicznej wartości wyrażenia.
Liczby w XPath
[edytuj | edytuj kod]Liczby w XPath zapisywane są jako zmiennoprzecinkowe liczby podwójnej precyzji. W takiej postaci przechowywane są wszystkie liczby, nawet liczby całkowite jak np. 2.
Operator | Znaczenie |
---|---|
| dodawanie |
| odejmowanie |
| mnożenie |
| dzielenie |
| modulo (reszta z dzielenia pierwszego argumentu przez drugi) |
XPath obsługuje także kilka funkcji działających na liczbach:
Funkcja | Znaczenie |
---|---|
| Zwraca najmniejszą liczbę całkowitą większą od liczby przekazanej jako parametr |
| Zwraca największą liczbę całkowitą mniejszą od liczby przekazanej jako parametr |
| Zaokrągla przekazaną liczbę do najbliższej liczby całkowitej |
| Zwraca sumę przekazanych funkcji liczb |
Napisy w XPath
[edytuj | edytuj kod]Napisy XPath składają się ze znaków Unicode. Poniżej zestawiono funkcje operujące na napisach:
Funkcja | Znaczenie |
---|---|
| Zwraca prawdę, jeśli napis s1 zaczyna się napisem s2 |
| Zwraca prawdę, jeśli napis s1 zawiera napis s2 |
| Zwraca i znaków napisu s, poczynając od znaku o |
| Zwraca część napisu s1 do pierwszego wystąpienia napisu s2 |
| Zwraca część napisu s1, od pierwszego wystąpienia napisu s2 poczynając |
| Zwraca liczbę znaków w napisie s |
| Zwraca napis s po usunięciu spacji wiodących i końcowych oraz po zamianie wszystkich ciągów kolejnych spacji na pojedyncze spacje |
| Zwraca napis s po zastąpieniu kolejnych znaków sf kolejnymi znakami napisu st |
| Zwraca wszystkie przekazane napisy połączone w całość |
Składnia skrócona XPath
[edytuj | edytuj kod]Wyrażenie | Skrót |
---|---|
| |
| |
child::dziecko | dziecko |
attribute::dziecko | @dziecko |
| |
dziecko[position() = 3] | dziecko[3] |
dziecko[position() = last()] | dziecko[last()] |
Zobacz też
[edytuj | edytuj kod]Linki zewnętrzne
[edytuj | edytuj kod]- Specyfikacja XML Path Language (XPath) Version 1.0
- Specyfikacja XML Path Language (XPath) Version 2.0
- Funkcje i osie XPath
- Tutorial XPath (w języku niemieckim)
- Tutorial XPath (w języku angielskim)
- XSLT i XPath odniesienia (w języku niemieckim)