XPath
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ń
edytujDo 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
edytujOś 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
edytujJako 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
edytujPredykaty 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
edytujZbió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
edytujFunkcja | 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
edytujW 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
edytujLiczby 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
edytujNapisy 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
edytujWyrażenie | Skrót |
---|---|
|
|
|
|
child::dziecko
|
dziecko
|
attribute::dziecko
|
@dziecko
|
|
|
dziecko[position() = 3]
|
dziecko[3]
|
dziecko[position() = last()]
|
dziecko[last()]
|
Zobacz też
edytujLinki zewnętrzne
edytuj- 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)