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.
Spis treści |
edytuj Budowa wyrażeń
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 child, badanie węzła to wyrażenie:
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.
edytuj Osie XPath
Oś to kolekcja węzłów lub atrybutów o określonym pokrewieństwie wobec węzła kontekstowego.
| Oś | Znaczenie |
|---|---|
| ancestor | 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 |
| ancestor-or-self | dotyczy węzła kontekstowego i jego przodków |
| attribute | dotyczy atrybutów węzła kontekstowego |
| child | dotyczy dzieci węzła kontekstowego |
| descendant | dotyczy potomków węzła kontekstowego. Potomek to dziecko, dziecko dziecka itd. |
| descendant-or-self | dotyczy węzła kontekstowego i jego potomków |
| following | dotyczy wszystkich węzłów z dokumentu, do którego należy węzeł kontekstu, które znajdują się po nim |
| following-sibling | dotyczy wszystkich węzłów znajdujących się na tym samym poziomie co węzeł kontekstu, za tym węzłem |
| namespace | dotyczy węzłów przestrzeni nazw węzła kontekstu |
| parent | dotyczy węzła rodzica węzła kontekstowego |
| preceding | dotyczy wszystkich węzłów z dokumentu, do którego należy węzeł kontekstu, które znajdują się przed nim |
| precending-sibling | dotyczy wszystkich węzłów znajdujących się na tym samym poziomie co węzeł kontekstu, przed tym węzłem |
| self | zawiera węzeł kontekstowy |
edytuj Badanie węzłów w XPath
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 |
|---|---|
| comment() | wybiera węzły komentarzy |
| node() | wybiera węzły dowolnego typu |
| processing-instruction() | wybiera węzły instrukcji przetwarzania, w nawiasach można podać także nazwę instrukcji |
| text() | wybiera węzły tekstowe |
edytuj Predykaty XPath
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
edytuj Zbiory węzłów XPath
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.
edytuj Funkcje XPath
| Funkcja | Znaczenie |
|---|---|
| last() | zwraca liczbę węzłów w zbiorze |
| position() | zwraca położenie węzła kontekstowego w zbiorze węzła kontekstowego |
| count(zbiór-węzłów) | zwraca liczbę węzłów w przekazanym zbiorze. Jeśli argument nie zostanie podany, zliczone zostaną węzły zbioru węzła kontekstowego |
| namespace-uri(zbiór-węzłów) | zwraca adres URI przestrzeni nazw pierwszego węzła ze zbioru. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
| name(zbiór-węzłów) | zwraca pełną kwalifikowaną nazwę pierwszego węzła ze zbioru. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
| local-name(zbiór-węzłów) | zwraca nazwę lokalną pierwszego węzła ze zbioru węzłów. Pominięcie parametru powoduje uruchomienie funkcji na węźle kontekstowym |
edytuj Wyrażenia logiczne XPath
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 (w dokumentach XML należy zapisywać jako <) |
| <= | mniejsze bądź równe (w dokumentach XML należy zapisywać jako <=) |
| = | równe (w odróżnieniu od podwójego 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.
edytuj Liczby w XPath
Liczby w XPath zapisywane są jako zmiennprzecinkowe liczby podwójnej precyzji. W takiej postaci przechowywane są wszystkie liczby, nawet liczby całkowite jak np. 2.
| Operator | Znaczenie |
|---|---|
| + | dodawanie |
| - | odejmowanie |
| * | mnożenie |
| div | dzielenie |
| mod | modulo (reszta z dzielenia pierwszego argumentu przez drugi) |
XPath obsługuje także kilka funkcji działających na liczbach:
| Funkcja | Znaczenie |
|---|---|
| ceiling() | Zwraca najmniejszą liczbę całkowitą większą od liczby przekazanej jako parametr |
| floor() | Zwraca największą liczbę całkowitą mniejszą od liczby przekazanej jako parametr |
| round() | Zaokrągla przekazaną liczbę do najbliższej liczby całkowitej |
| sum() | Zwraca sumę przekazanych funkcji liczb |
edytuj Napisy w XPath
Napisy XPath składają się ze znaków Unicode. Poniżej zestawiono funkcje operujace na napisach:
| Funkcja | Znaczenie |
|---|---|
| starts-with(s1,s2) | Zwraca prawdę, jeśli napis s1 zaczyna się napisem s2 |
| contains(s1,s2) | Zwraca prawdę, jeśli napis s1 zawiera napis s2 |
| substring(s,o,i) | Zwraca i znaków napisu s, poczynając od znaku o |
| substring-before(s1,s2) | Zwraca część napisu s1 do pierwszego wystąpienia napisu s2 |
| substring-after(s1,s2) | Zwraca część napisu s1 od pierwszego wystąpienia napisu s2 poczynając |
| string-length(s) | Zwraca liczbę znaków w napisie s |
| normalize-space(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 |
| translate(s,sf,st) | Zwraca napis s po zastąpieniu kolejnych znaków sf kolejnymi znakami napisu st |
| concat(s1,s2,…) | Zwraca wszystkie przekazane napisy połączone w całość |
| format-number(l,s1,s2) | Zwraca napis zawierający sformatowaną liczbę l, przy czym s1 jest używany jako ciąg formatujący, a s2 to opcjonalnie ustawienie językowe |
edytuj Składnia skrócona XPath
| Wyrażenie | Skrót |
|---|---|
| self::node() | . |
| parent::node() | .. |
| child::dziecko | dziecko |
| attribute::dziecko | @dziecko |
| /descendant-or-self::*/ | //* |
| dziecko[position() = 3] | dziecko[3] |
| dziecko[position() = last()] | dziecko[last()] |
edytuj Zobacz też
edytuj Linki zewnętrzne
- Specyfikacja XML Path Language (XPath) Version 1.0
- Specyfikacja XML Path Language (XPath) Version 2.0
- Funkcje i osie XPath
- Tutorial XPath
|
|||||||||||||||||||
