XPath
XML Path Language ( XPath ) jest językiem zapytań opracowany przez konsorcjum W3 na adres i oceny części z XML dokumentu. XPath służy jako podstawa dla wielu innych standardów, takich jak XSLT , XPointer i XQuery . XPath jest obecnie znormalizowany w wersji 3.1 od 21 marca 2017.
W przeglądarkach internetowych , procesorach XSLT i innym oprogramowaniu często obsługiwana jest tylko wersja XPath 1.0 z 1999 r., Aw niektórych przypadkach XPath w wersji 2.0 z 2007 r.
Zasady
XPath wyrażenie adresy części z XML dokumentu, który jest oglądany w postaci drzewa , chociaż pewne różnice w stosunku do „klasycznej” drzewa teorii grafów należy przestrzegać:
- Węzły (węzły) drzewa reprezentują węzeł dokumentu, elementy XML, atrybuty, -Textknoten, komentarze, -Namensräume i instrukcje przetwarzania.
- Osie
preceding
,following
,preceding-sibling
ifollowing-sibling
nie są oparte wyłącznie na drzewie, ale także w kolejności deklaracji elementów w dokumencie XML (powiązany-tree).
XPath -expression składa się z jednego lub większej liczby etapów lokalizacyjnych (Location) Kroki razem. Są oddzielone symbolem /
.
Kroku lokalizacji axis::node-test[predicate 1][predicate 2]...
składa się z:
- Oś (oś) i
- Test węzłów ,
- opcjonalnie następuje jeden lub więcej predykatów (predykatów) .
Za pomocą symbolu potoku | można wprowadzić dowolną liczbę wyrażeń XPath łączcie się ilościowo .
Zawsze istnieją różne sposoby wyrażania żądanego zestawu węzłów w XPath.
XPath działa na logicznej strukturze dokumentu. Oznacza to na przykład, że jednostki są już przeanalizowane lub że wszystkie standardowe atrybuty i węzły, które są określone przez schemat, są już zawarte w drzewie.
osie
Po określeniu osi nawigacja po strukturze drzewa dokumentu XML jest rozpoczynana od bieżącego węzła kontekstu.
Jeśli założono węzeł dokumentu (katalog główny dokumentu XML), wyrażenie XPath jest /
poprzedzone znakiem .
oś | adresowane węzły | skrót | Pozycja m.in. Drzewo (na podstawie elementu D) |
---|---|---|---|
węzeł dokumentu |
/ (na początku XPath) |
Węzeł dokumentu | |
child |
wszystkie bezpośrednio podrzędne węzły potomne | (jest pominięty) | E, G. |
parent |
bezpośrednio nadrzędny węzeł | .. |
B. |
self |
sam węzeł kontekstu (przydatny w przypadku dodatkowych warunków) | . |
RE. |
ancestor |
wszystkie węzły macierzyste | B, A | |
ancestor-or-self |
wszystkie węzły wyższego poziomu, w tym węzeł kontekstu | D, B, A. | |
descendant |
wszystkie węzły potomne | .// |
E, F, G. |
wszystkie węzły dokumentu z wyjątkiem węzła dokumentu | // |
A, B, C, D, E, F, G, H, I, J, K, L | |
descendant-or-self |
wszystkie węzły podrzędne, w tym węzeł kontekstu | D, E, F, G | |
following |
Kolejny w dokumencie XML (bez węzłów podrzędnych wybranego węzła) | H, I, J, K, L | |
following-sibling |
jak following , ale jednocześnie z tego samego parent pochodzenia |
CZEŚĆ | |
preceding |
poprzedzający w dokumencie XML (bez węzłów nadrzędnych) | DO. | |
preceding-sibling |
jak preceding , ale jednocześnie z tego samego parent pochodzenia |
DO. | |
attribute |
Węzeł atrybutu | @ |
|
namespace |
Węzły przestrzeni nazw z atrybutu xmlns pochodnego |
To drzewo stanowi przykład struktury dokumentu XML
Węzeł dokumentu | |||||||||||||||||||||||||||||||||
ZA. | |||||||||||||||||||||||||||||||||
B. | L. | ||||||||||||||||||||||||||||||||
DO. | (RE) | H. | JA. | ||||||||||||||||||||||||||||||
MI. | sol | jot | K. | ||||||||||||||||||||||||||||||
FA. | |||||||||||||||||||||||||||||||||
Pięć osie self
, ancestor
, descendant
, preceding
i following
forma zaczynając od dowolnego węzła w drzewie dokumentu całkowicie i bez nakładania się od.
Testy węzłów
Testy węzłów (pisemne ) ograniczają wybór elementów osi:
Achse::Knotentest
- Określenie nazwy elementu powoduje wybranie wszystkich odpowiednich elementów.
Przykład:/descendant-or-self::Foo
zaznacza wszystkie elementy w dokumencie, które mają nazwę „Foo”. - Za pomocą znaku
*
możesz wybrać dowolny element.
Przykład:/descendant-or-self::Foo/child::*
zaznacza wszystkie elementy w dokumencie, które są dziećmi elementów o nazwie „Foo”. - Z
text()
,comment()
iprocessing-instruction()
węzły pewnego rodzaju może być wybrany.
Predykaty
Wynik można dodatkowo ograniczyć, określając predykaty. Predykaty są zawarte w nawiasach kwadratowych i można je zapisać w dowolnej liczbie jeden po drugim, przy czym kolejność jest niezbędna. Predykaty mogą zawierać wyrażenia XPath i można używać różnych funkcji i operatorów. Są to na przykład:
- Indeks dostępu (liczenie zaczyna się od 1)
- Znak relacji:
= != and or < > <= >=
- Funkcje ciągów:
-
normalize-space()
- Usunięcie spacji na początku i na końcu ciągu oraz redukcja kolejnych spacji do jednego -
substring()
- Wybierz częściowy ciąg -
substring-before(source, splitter)
- Wybierz podciąg przed pierwszym wystąpieniem separatora -
substring-after(source, splitter)
- Wybierz podciąg po pierwszym wystąpieniu separatora -
string-length()
- długość sznurka
-
- Operatory numeryczne:
+ - * div mod
- Funkcje zestawu węzłów:
-
count()
- Liczba węzłów w zestawie węzłów -
id()
- Wybiera elementy poprzez ID DTD -
name()
- nazwa węzła
-
Przykłady:
-
//child::Buch/Kapitel
Wszystkie rozdziały wszystkich książek. -
//child::Buch/Kapitel[1]
Wszystkie pierwsze rozdziały wszystkich książek. -
//child::Buch[count(./Seite)<=100][count(./Seite)>=10]
zwraca wszystkie węzły typu „book”, które mają co najmniej 10, ale co najwyżej 100 elementów podrzędnych typu „page”.
(robi to samo //Buch[count(Seite)<=100 and count(Seite)>=10]
)
-
substring-before($variable, ':')
Wybiera podciąg przed pierwszym dwukropkiem z wartości zmiennej o nazwie zmiennej
przykład
Podano następujący dokument XML:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<dok>
<!-- ein XML-Dokument -->
<kap title="Nettes Kapitel">
<pa>Ein Absatz</pa>
<pa>Noch ein Absatz</pa>
<pa>Und noch ein Absatz</pa>
<pa>Nett, oder?</pa>
</kap>
<kap title="Zweites Kapitel">
<pa>Ein Absatz</pa>
<pa format="bold">Erste Zeile</pa>
<pa format="bold">Zweite Zeile</pa>
<pa format="italic">Dritte Zeile</pa>
</kap>
</dok>
Przykłady wyrażeń XPath:
Wyrażenie | wybrane ... |
---|---|
/dok |
pierwszy element dok
|
/* |
najbardziej zewnętrzny element niezależnie od nazwy (każdy dobrze sformułowany dokument XML ma dokładnie jeden najbardziej zewnętrzny element), tutajdok
|
//dok/kap |
wszystkie kap elementy we wszystkich dok elementach
|
//dok/kap[1] |
wszystkie pierwsze kap elementy we wszystkich dok elementach
|
//pa |
wszystkie pa elementy na wszystkich poziomach
|
//kap[@title='Nettes Kapitel']/pa |
wszystkie akapity rozdziałów zatytułowane „Nice Chapter”. |
//kap/pa[2] |
Drugi element pa w każdym z dwóch rozdziałów. |
//kap[2]/pa[@format='bold'][2] |
Drugi wiersz z formatem „pogrubiony” w rozdziale 2. |
child::* |
wszystkie elementy podrzędne bieżącego węzła |
child::pa |
wszystkie pa elementy podrzędne bieżącego węzła
|
child::text() |
wszystkie węzły tekstowe bieżącego węzła |
. |
obecny węzeł |
./* |
wszystkie elementy podrzędne bieżącego węzła |
./pa |
wszystkie pa elementy podrzędne bieżącego węzła
|
pa |
wszystkie pa elementy podrzędne bieżącego węzła
|
attribute::* |
wszystkie atrybuty bieżącego węzła |
namespace::* |
wszystkie przestrzenie nazw bieżącego węzła |
//kap[1]/pa[2]/text() |
Treść tekstowa drugiego pa elementu w pierwszym kap elemencie (tj. „Kolejny akapit”)
|
Wizualizatory XPath pomagają zastosować czasami skomplikowane zapytania XPath do konkretnych plików XML.
Zobacz też
literatura
- Michael Kay: Dokumentacja programisty XPath 2.0 . Wrox Press, 2004, ISBN 0-7645-6910-4 (angielski)
- Margit Becher: XML - DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM . W3L Verlag, Witten 2009, ISBN 978-3-937137-69-8 .
linki internetowe
- XML Path Language (XPath) w wersji 1.0 ; a także niemieckie tłumaczenie
- XML Path Language (XPath) w wersji 2.0
- XML Path Language (XPath) w wersji 3.1
- Funkcje i operatory XQuery 1.0 i XPath 2.0
- Samouczek XPath w języku niemieckim
- Samouczek XPath z w3schools
- Samouczek ZVON: XPath w języku niemieckim
- FH Wedel: XLink, XPath, XPointer
- HTMLWorld: XPath
- Wykresy osi XPath
- XPath Visualizer wyświetla wyrażenia XPath wizualnie na podstawie dowolnych plików XML.
- obszerne odniesienia do XPath 2.0 z przykładami