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-siblingi following-siblingnie 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:

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 .

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 parentpochodzenia CZEŚĆ
preceding poprzedzający w dokumencie XML (bez węzłów nadrzędnych) DO.
preceding-sibling jak preceding, ale jednocześnie z tego samego parentpochodzenia DO.
attribute Węzeł atrybutu @
namespace Węzły przestrzeni nazw z atrybutu xmlnspochodnego

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, precedingi followingforma 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::Foozaznacza 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()i processing-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 kapelementy we wszystkich dokelementach
//dok/kap[1] wszystkie pierwsze kapelementy we wszystkich dokelementach
//pa wszystkie paelementy 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 paelementy 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 paelementy podrzędne bieżącego węzła
pa wszystkie paelementy 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 paelementu w pierwszym kapelemencie (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

Wikisłownik: XPath  - wyjaśnienia znaczeń, pochodzenie słów, synonimy, tłumaczenia

Indywidualne dowody

  1. w3.org