Syntaxe XPath. Jazyk dotazu XPath

     (předek) obsahuje všechny předky kontextového uzlu, včetně rodičů, dědečků, pradědů atd. Tato osa vždy obsahuje kořenový uzel - pokud kontextový uzel není samotný kořenový uzel.

Podívejte se na Výpis 7.3, ve kterém se používá osa

  Hledání názvů (uložených v prvku) všech předků prvků. Výpis 7.3. Použijte předchůdce osy
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Zde je výsledek použití této šablony stylů

:

Použití osy předka nebo samo

  obsahuje všechny předky kontextového uzlu, jakož i samotný kontextový uzel. To mimo jiné znamená, že taková osa vždy obsahuje kořenový uzel.

Výpis 7.4 přidává atributy

  s hodnotou "Steve" v celém dokumentu. Výpis 7.4. planets.xml s atributy AUTHOR
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
1
2107
1
128.4

Předpokládejme nyní, že chci uvést jména všech předků prvků

má atribut i aktuální prvek, pokud má atribut. To lze provést pomocí osy a funkce (Výpis 7.5). Výpis 7.5. Použití osy předka nebo samo
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Zde je výsledek; zobrazuje vybrané předky všech tří prvků

, včetně samotného prvku, za předpokladu, že má atribut:

Aplikace sestupné osy

  (descendant) obsahuje všechny potomky kontextového uzlu. Všimněte si, že zde nejsou zahrnuty atributy nebo uzly oboru názvů, protože nejsou považovány za podřízené uzly.

Následující příklad (Výpis 7.6) ukazuje, jak pracovat s touto osou. Tentokrát chci k položce přidat poznámku

  Merkur:
  (Promiň, ale Merkur explodoval a už není k dispozici.). Chcete-li najít Merkur, musím pouze zkontrolovat, zda některý potomek prvku má hodnotu řetězce "", kterou udělám s pomocí výrazu XPath uvnitř predikátu výběru. Výpis 7.6. Aplikace sestupné osy
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
Je nám líto. Rtuť vyhořela a již není k dispozici.

Zde je výsledný dokument, doplněný novým prvkem.

  pouze pro Merkur:
.0553
58.65
1516
.983
43.4
Je nám líto, Merkur vyhodil do povětří a už není k dispozici.
.815
116.75
3716
.943
66.8

Aplikace sestupné osy

  obsahuje všechny potomky kontextového uzlu a samotný kontextový uzel. Všimněte si však, že neobsahuje atributy oboru názvů a uzly.

Následující příklad (Výpis 7.7) ukazuje, jak pracovat s osou. V tomto případě jsem vytvořil zjednodušený seznam stylů (podrobnosti o zjednodušených tabulkách stylů viz kapitola 2), které zpracovávají všechny elementy pomocí potomků a generují již známou HTML tabulku dat planety.

Výpis 7.7. Aplikace sestupné osy

To je všechno. Použil jsem zde zjednodušený seznam stylů, abych zdůraznil, že s pomocí těchto sestupných os jako

  nebo můžete automaticky zpracovat všechny vybrané uzly, podobně jako prvky nebo.

Následná osa použití

Následující osa (další) obsahuje všechny uzly umístěné za kontextovým uzlem podle pořadí uvedeného v dokumentu (jinými slovy v pořadí, v jakém se v dokumentu objevují, počínaje jeho počátkem), vyjma všech potomků kontextového uzlu a také uzlů atributů a jmenných prostorů.

V tomto příkladu (Výpis 7.8) vyberu každou položku. Zkopírujte všechny následné prvky do výsledného dokumentu.

Výpis 7.8. Následná osa použití
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
   Rtuť, kopíruje všechny následující prvky - to znamená Venuši, pak všechny potomky Venuše, pak Zemi a pak všechny potomky Země. Poté vybere prvek Venuše a zkopíruje všechny následující prvky, tj. Zemi a všechny potomky Země:
.815
116.75
3716
.943
66.8
.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4

Na druhé straně při použití osy

  Do výsledného dokumentu budou zkopírovány pouze další bratři, tedy pouze prvky, jak uvidíme v další části.

Následná aplikace osy - sourozenec

  obsahuje všechny následné bratry kontextového uzlu.

Můžu například vybrat každou položku.

  a zkopírujte všechny uzly v ose do výsledného dokumentu následujícím způsobem (Výpis 7.9). Výpis 7.9. Následná aplikace osy - sourozenec
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

V tomto případě jsou zkopírovány první dva uzly, následované Merkurem (Venuše a Země), pak je zkopírován další bratr Venuše, který je uzlem Země. Země sama o sobě nemá žádné bratry, takže výsledek vypadá takto:

.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4

Použití osy oboru názvů

  obsahuje uzly oboru názvů kontextového uzlu. Tato osa je prázdná, pokud kontextový uzel není prvek. Prvek má uzel oboru názvů pro:

Každý atribut prvku, jehož jméno začíná "xmlns:";

Každý atribut elementu předka, jehož jméno začíná "xmlns:" (samozřejmě, pokud element sám nebo nejbližší předchůdce znovu nevyhlásí jmenný prostor);

Atribut

pokud prvek nebo předchůdce má atribut.

V následujícím příkladu (Výpis 7.10) chci zobrazit obor názvů prvků

  ve výsledném dokumentu a ve zdrojovém dokumentu jsem jmennému prostoru přidělil název „http://www.starpowder.com“. Výpis 7.10. planets.xml s deklarací jmenného prostoru
.0553
58.65
1516
.983
43.4

Zde je seznam stylů (Výpis 7.11), ve kterém kontroluji jmenné prostory použité v prvku

. Výpis 7.11. Použití osy oboru názvů v planets.xml
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Výsledný dokument (všimněte si, že typ dokumentu se může lišit v závislosti na procesoru XSLT):

Použijte nadřazenou osu

Nadřazená osa obsahuje nadřazený (a pouze nadřazený) kontextový uzel, pokud existuje.

Předpokládám, že chci změnit obsah prvku Země

  na "\u003e\u003e (Hmotnost Země je vzata jako 1). Následující šablona (Výpis 7.12) kontroluje, zda rodičovský prvek obsahuje prvek s hodnotou řetězce "Země". Výpis 7.12. Použijte nadřazenou osu
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Hmotnost zeminy je nastavena na 1.

A tady je výsledek:

.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
Hmotnost zeminy je nastavena na 1.
2107
1
128.4

Použijte osu předcházející

  obsahuje všechny uzly umístěné před kontextovým uzlem v souladu s objednávkou uvedenou v dokumentu, s vyloučením všech předků kontextového uzlu, stejně jako s vyloučením uzlů atributů a uzlů oboru názvů.

Předpokládejme například, že potřebuji nastavit obsah položky

  text "" (Tato planeta se nachází dál od Slunce než Merkur), pokud je tato planeta skutečně daleko od Slunce než Merkur. Jedním ze způsobů, jak toho dosáhnout, je zkontrolovat, zda se Merkur nachází v přední části planety podle pořadí uvedeného v dokumentu s použitím osy (Výpis 7.13). Výpis 7.13. Použijte osu předcházející
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
Tato planeta je dál od Slunce než Merkur.

Pokud je současná planeta po Merkuru, můžu do jejího prvku vložit zprávu

. Výsledek je následující:
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
Tato planeta je dál od Slunce než Merkur.
1
2107
1
Tato planeta je dál od Slunce než Merkur.

Použijte předchozí sourozeneckou osu

  obsahuje všechny předchozí bratry kontextového uzlu. Pokud kontextový uzel je uzlem atributu nebo uzlem oboru názvů, bude osa prázdná.

Co když například potřebujete vytvořit šablonu, která bude vybírat pouze prvky

  v prvku Merkuru? Chcete-li to provést, můžete zkontrolovat, zda bratři existují před prvkem, což jsou prvky s hodnotou řetězce "". Pokud použijete osu (Výpis 7.14), hledání bude omezeno na aktuální prvek, což znamená, že Merkur nebude vybrán, pokud nejste v pravém prvku. Výpis 7.14. Použijte předchozí sourozeneckou osu
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

A tady je výsledek:

.0553
58.65
1516
.983
Toto je planeta Merkur, nejblíže Slunci.
.815
116.75
3716
.943
66.8
1
2107
1
128.4

Použití vlastní osy

  obsahuje pouze kontextový uzel. V souladu s jednou ze zkratek XPath, jak uvidíme později, místo "" můžete použít "".

Tato osa je užitečné mít na paměti, protože, jak si pamatujete z kapitoly 4, pokud nezadáte osu, bude výchozí osa

a v některých případech budete muset odkazovat na aktivní uzel. Například bude akceptovat hodnotu pravdy pouze v případě, že kontextový uzel je prvek.

V následujícím příkladu kombinuji vzory prvků

  a v jednom vzoru. Vzhledem k tomu, že tyto prvky mají různé formáty, musím s nimi zacházet odlišně v rámci stejné šablony (což lze provést kontrolou hodnot os, které vrací nenulovou sadu uzlů, pokud je kontextový uzel prvkem, a vrací sadu neprázdných uzlů, pokud kontextový uzel je prvek):

Tím dochází k přezkumu nových os XPath. Přejdeme k příkladům.

Příklady cest

Studovali jsme dost teorie dráhy. Samozřejmě je nejlepší zvládnout tento materiál s příklady, takže uvádím následující seznam příkladů cest (po tomto seznamu jsou uvažovány redukované verze):

  . Vrátí děti kontextového uzlu; . Vrátí všechny podřízené textové uzly kontextového uzlu; . Vrátí všechny potomky kontextového uzlu; . Vrátí atribut kontextového uzlu; . Vrátí všechny sestupné prvky kontextového uzlu; . Vrátí všechny předky kontextového uzlu; . Vrací předky kontextového uzlu. Pokud je kontextový uzel také, vrátí se také kontextový uzel; . Vrátí sestupné prvky kontextového uzlu. Pokud je kontextový uzel také, vrátí se také kontextový uzel; . Vrátí kontextový uzel, pokud se jedná o prvek;
dítě :: PLANET / descendant :: NAME
. Vrátí potomky potomků kontextového uzlu; . Vrátí všechny vnoučata kontextového uzlu; . Vrátí kořenový uzel; . Vrátí všechny prvky v dokumentu;
/ descendant :: PLANET / child :: NAME
. Vrátí všechny položky s rodičem v dokumentu; . Vrátí třetí podřízený uzel kontextu;
dítě :: PLANET
. Vrátí poslední potomek kontextového uzlu;
/ descendant :: PLANET
. Vrátí třetí položku v dokumentu;
dítě :: PLANETY / dítě :: PLANET / dítě :: NAME
. Vrací třetí prvek čtvrtého prvku prvku; . Vrátí všechny děti kontextového uzlu po prvních třech;
previous-sibling :: NAME
. Vrátí druhý předchozí sourozenec kontextového uzlu;
dítě :: *
. Vrátí uzel pro děti a kontext.
dítě :: *
. Vrátí poslední podřízený nebo kontextový uzel.

Jak vidíte, syntaxe některých výrazů je docela matoucí a jejich psaní je také poměrně dlouhé. Jako u vzorků však existuje zkrácená forma syntaxe XPath.

Zkrácená syntaxe XPath

Zkratky syntaxe XPath mohou být velmi užitečné. Níže jsou uvedena pravidla:

  lze zkrátit; lze zkrátit; lze zkrátit; lze zkrátit; lze zkrátit jako.

Například cesta umístění

  - zkratka pro
self :: node () / descendant-or-self :: node () / child :: PLANET
. Můžete také zkrátit predikátový výraz, jako např. Práce s cestami XPath s kratší syntaxí je mnohem snazší. Následující seznam uvádí několik příkladů umístění cesty pomocí zkrácené syntaxe: vrátí děti kontextového uzlu; vrátí všechny podřízené prvky kontextového uzlu; vrátí všechny podřízené textové uzly kontextového uzlu; vrátí atribut kontextového uzlu; vrátí všechny atributy kontextového uzlu; vrátí třetí podřízený uzel kontextu; vrátí poslední potomek kontextového uzlu; vrátí všechny vnoučata kontextového uzlu; vrací druhý prvek třetího prvku prvku; vrátí všechny potomky kořene dokumentu; vrátí sestupné prvky podřízených prvků kontextového uzlu; vrátí všechny položky, které mají rodiče; vrací samotný kontextový uzel; vrátí sestupné prvky kontextového uzlu; vrátí nadřazený uzel kontextu; vrátí nadřazený atribut kontextového uzlu; vrátí všechny rodiče potomka kontextového uzlu a rodiče kontextového uzlu; vrátí děti uzlu kontextu, který má děti; vrací děti kontextového uzlu, které mají děti s textem rovným „Venuše“; vrátí všechny potomky kontextového uzlu, které mají atribut s hodnotou ""; vrátí šesté dítě kontextového uzlu pouze v případě, že toto dítě má atribut s hodnotou „days“. Můžete také psát; vrátí všechny potomky kontextového uzlu, které mají atribut a atribut;
// PLANET
"vybere všechny elementy, jejichž hodnota se liší od hodnoty předchozího elementu; vybere každý element, který je prvním potomkem svého rodiče; vybere prvních pět dětí kontextového uzlu, které mají atribut."

Kontrola výrazu XPath

Balíček Xalan obsahuje praktický příklad programu ApplyXPath.java, který vám umožňuje aplikovat výraz XPath na dokument a podívat se na výsledek, který při testování hodně pomáhá. Pro spuštění tohoto příkladu budete muset kompilovat

  s nástrojem java.exe obsaženým v distribuci Java.

Jako příklad použiji výraz XPath "

"S pomocí." Níže je uveden výsledek, který zobrazuje všechny prvky, které jsou dětmi prvků (značky přidané programem ApplyXPath):
% java ApplyXPath planets.xml PLANET / NAME
RtuťVenušeZemě

XPath 2.0

XPath je upgradován a obsahuje podporu XSLT 2.0 (viz www.w3.org/TR/xpath20req). Úlohy XPath 2.0 jsou následující:

Zjednodušte operace s typy obsahu podporovanými schématem XML;

Zjednodušení operací s obsahem řetězce;

Podpora vhodných standardů XML;

Vylepšená použitelnost;

Zlepšená interoperabilita;

Zlepšení podpory mezinárodních jazykových nástrojů;

Zachování zpětné kompatibility;

Zvýšená efektivita procesoru.

Následující seznam uvádí přehled požadavků XPath. Hlavními body jsou podpora schématu XML a regulárních výrazů, což vám dává prostředky pro práci s řetězci a vyhledávání v řetězcích. (Více informací o regulárních výrazech naleznete na adrese http://www.perldoc.com/perl5.6/pod/perlre.html.) Podle W3C, XPath 2.0:

Musí podporovat architekturu XML W3C, dobře spolupracuje s ostatními standardy v rodině XML;

Musí vyjádřit váš datový model z hlediska sady informací XML (infoset);

Musí poskytovat syntaxi obecného klíče pro jazyk XSLT 2.0 a jazyk XML Query 1.0;

Musí podporovat explicitní porovnání "

"Nebo" "a syntaxe rovnosti;

Musí rozšířit řadu agregačních funkcí (například uživatelé XSLT často požadovali přidání funkcí

  a);

Musí udržovat zpětnou kompatibilitu s XPath 1.0;

Musí poskytovat průsečíkové a diferenční funkce - to znamená, že XPath 1.0 podporuje kombinování dvou sad uzlů a k tomu musí být přidány funkce průsečíku a rozdílu;

Musí podporovat unary plus operaci (protože desetinná čísla mohou mít vedoucí plus ve XML schématu);

Zlepšit použitelnost;

Musí omezit omezení kroků umístění.

Musí být provedena podmínková operace, která pracuje na třech výrazech - výrazu 1 (logická operace), výrazu 2 a výrazu 3. Pokud výraz 1 nabývá hodnoty „true“, musí být vypočítán výraz 2 a výraz 1 má hodnotu „false“, výraz 3 ;

Musí definovat sekvenční syntaxi pro podvýrazy, které zpracovávají kolekce prvků;

Musí podporovat další funkce řetězce. Například, W3C zvažuje přidávat prostředky pro náhrady v řetězcích, vyplňování charakterů a převody případu;

Musí podporovat agregační funkce při použití na sbírky. Někteří uživatelé XPath 1.0 například potřebovali použít agregační funkci, jako je například

na hodnoty výrazů aplikovaných na sady uzlů;

Musí podporovat regulární výrazy pro vyhledávání ve řetězcích pomocí zápisu regulárního výrazu nastaveného ve schématu XML;

Musí podporovat základní typy dat schématu XML. To znamená, že kromě typů podporovaných datovým modelem XPath 1.0 - řádek, číslo, logická hodnota a sada uzlů - musí datový model XPath 2.0 podporovat elementární datové typy schématu XML;

Musí podporovat reprezentace s jednou a dvojitou přesností s plovoucí desetinnou čárkou podporovanou schématem XML, které používá vědecké zápisy;

Musí definovat vhodnou sadu funkcí pro práci uživatele s elementárními datovými typy schémat XML;

Musí být přidán datový typ „list“ do XPath (protože schéma XML umožňuje definovat jednoduché typy zděděné ze seznamu);

Musí podporovat přístup k hodnotám jednoduchých typů elementů a atributů. Protože schémata XML představují mnoho nových typů, musí XPath 2.0 podporovat přístup k vlastnímu jednoduchému typu, prvku nebo hodnotě atributu;

Musí definovat chování operátorů pro argumenty null;

Musí mít prostředky pro výběr prvků nebo atributů založených na explicitním typu schématu XML;

Musí mít prostředky pro výběr prvků nebo atributů založených na hierarchii typů schémat XML;

Musí mít prostředky pro výběr prvků založených na substitučních skupinách XML schématu;

Musí podporovat nástroje pro vyhledávání založené na jedinečných omezeních a klíčích schémat.

I když jsme se dostali na konec kapitoly, o XPathu se neříká všechno. Téma bude pokračovat v další kapitole, ve které se podrobněji podíváme na funkce a funkce dostupné v XPath, které jsou již zabudovány do XSLT.

Xpath je jazyk pro dotazování XML nebo xhtml elementu dokumentu. Podobně jako SQL je xpath deklarativním dotazovacím jazykem. Chcete-li získat zajímavá data, stačí vytvořit dotaz, který popisuje tato data. Všechny "černé" práce pro vás provedou jazyk interpretu xpath.
  Velmi pohodlné, že? Podívejme se, jaké funkce xpath nabízí pro přístup k uzlům webových stránek.

Vytvoření požadavku na uzly webové stránky

  Přináším vám malou laboratorní práci, během které ukážu vytvoření požadavků xpath na webovou stránku. Budete moci zopakovat požadavky, které jsem citoval, a hlavně se budete snažit splnit své vlastní. Doufám, že díky tomuto článku budou stejně zajímaví začátečníci i programátoři, kteří jsou obeznámeni s xpath xml.

Pro laboratoř potřebujeme:
   - webová stránka xhtml;
   - prohlížeč Mozilla Firefox s doplňky;
   - firebug;
   - firePath;
   (můžete použít jakýkoliv jiný prohlížeč s vizuální podporou pro xpath)
   - trochu času.

Jako webovou stránku experimentu navrhuji hlavní stránku webové stránky konsorcia World Wide Web Consortium ("http://w3.org"). Je to tato organizace, která vyvíjí xquery jazyky (xpath), xhtml specifikace a mnoho dalších internetových standardů.

Úkol
  Získejte z kódu xhtml domovskou stránku  w3.org informace o konsorciálních konferencích využívajících dotazy xpath.
  Začněme psát xpath požadavky.
První požadavek xpath
  Otevřete záložku Firepath v FireBugu, vyberte prvek pro analýzu pomocí selektoru, klikněte na: Firepath vytvořil požadavek xpath na vybraný prvek.

Pokud jste vybrali název první události, bude požadavek následující:

   / a

Po odstranění extra indexů se požadavek shoduje se všemi prvky typu „title“.

Firepath zvýrazní položky, které odpovídají dotazu. V reálném čase můžete vidět, které uzly dokumentu odpovídají požadavku.

Žádost o informace o místech konání konference:
   .//*[@id="w3c_home_upcoming_events"[/ul/li/div/p

Tak dostaneme seznam sponzorů:
   .//*[@id="w3c_home_upcoming_events"[/ul/li/div/p

Syntaxe Xpath

  Vraťme se k vytvořeným dotazům a uvidíme, jak fungují.
  Podrobně zvažte první žádost

V tomto dotazu jsem zdůraznil tři části, abych demonstroval schopnosti xpath. (Divize do částí je lov)

První část
.//   - rekurzivní sestup do nulové nebo více úrovní hierarchie z aktuálního kontextu. V našem případě je aktuálním kontextem kořen dokumentu.

Druhá část
*   - libovolná položka
[@ id = "w3c_home_upcoming_events"] - predikát, na jehož základě hledáme uzel, který má atribut id roven "w3c_home_upcoming_events". Identifikátory prvků XHTML musí být jedinečné. Dotaz „jakákoliv položka s konkrétním ID“ proto musí vrátit jediný uzel, který hledáme.

Můžeme nahradit *   na přesný název uzlu div  v této žádosti
   div [@ id = "w3c_home_upcoming_events"]

Proto sestupujeme stromem dokumentů do požadovaného uzlu div [@ id = "w3c_home_upcoming_events"]. Absolutně nám nezáleží na tom, z jakých uzlů se strom DOM skládá a kolik úrovní hierarchie zůstane nahoře.

Třetí část
/ ul / li / div / p / a  –Xpath cesta ke specifickému prvku. Cesta se skládá z kroků adresování a stavu kontrolních uzlů (ul, li atd.). Kroky jsou odděleny znakem "/" (lomítko).

Kolekce Xpath
  Není vždy možné přistupovat k zájmovému uzlu pomocí predikátu nebo adresovacích kroků. Velmi často, na stejné úrovni hierarchie, existuje tolik uzlů stejného typu, kolik je jen možné, a je nutné vybrat „pouze první“ nebo „pouze druhé“ uzly. Pro tyto případy jsou poskytovány sbírky.

Kolekce xpath umožňují přístup k položce podle jejího indexu. Indexy odpovídají pořadí, ve kterém byly prvky uvedeny v původním dokumentu. Pořadové číslo ve sbírkách se počítá od jedné.

Na základě skutečnosti, že „místo konání“ je vždy druhým odstavcem za názvem „konference“, získáme následující žádost:
   .//*[@id="w3c_home_upcoming_events"[/ul/li/div/p
  Kde p je druhý prvek v sadě pro každý uzel seznamu / ul / li / div.

Podobně můžeme získat seznam sponzorů dotazem:
   .//*[@id="w3c_home_upcoming_events"[/ul/li/div/p

Některé funkce XPath
  V XPath existuje mnoho funkcí pro práci s položkami v rámci kolekce. Dám jim jen některé.

poslední ():
  Vrátí poslední položku v kolekci.
  Dotaz ul / li / div / p - vrátí poslední odstavce pro každý uzel seznamu „ul“.
  Funkce first () není k dispozici. Pro přístup k prvnímu prvku použijte index "1".

text ():
  Vrátí obsah testu položky.
   . / a - dostaneme všechny odkazy s textem "Archiv".

position () a mod:
  position () - vrátí polohu prvku v sadě.
  mod je zbytek divize.

Kombinací těchto funkcí můžeme získat:
   - ani ul / li prvky
   - i prvky: ul / li

Srovnávací operace

  • < - логическое «меньше»
  • \u003e - logické "více"
  • <= - логическое «меньше либо равно»
  • \u003e = - logické "větší nebo rovno"
   ul / li, ul / li - seznam položek začínajících od 3. čísla a naopak.

XPath používá výrazy cesty k výběru uzlů a sad uzlů v dokumentu XML. Uzel je vybrán následováním dané cesty nebo tzv. Kroky.

Ukázkový dokument XML

Následující dokument XML bude použit k demonstraci syntaxe XPath:

Připomenutí Pošlete dopis! Připomenutí E-mail odeslán

Výběr uzlu

Chcete-li vybrat uzly v dokumentu XML, použije XPath výrazy cesty. Uzel je vybrán podle zadané cesty. Nejužitečnějšími výrazy cesty jsou:

V následující tabulce jsou uvedeny některé výrazy XPath, které umožňují provádět některé výběry v ukázkovém dokumentu XML:

Výraz XPath Výsledek
zprávy Vybere všechny uzly s názvem "zprávy"
/ zprávy Vybere kořenový prvek zpráv.
Poznámka: Pokud cesta začíná lomítkem (/), pak vždy představuje absolutní cesta  k prvku!
zprávy / poznámky Vybere všechny prvky poznámky, které jsou potomky prvku zprávy.
// poznámka Vybere všechny prvky poznámky bez ohledu na to, kde se v dokumentu nacházejí.
zprávy // poznámka Vybere všechny prvky poznámek, které jsou potomky prvku zpráv, bez ohledu na to, kde jsou z prvku zprávy.
// @ datum Vybere všechny atributy s názvem datum

Predikáty

Predikáty umožňují najít konkrétní uzel nebo uzel se specifickou hodnotou.

Predikáty jsou vždy uzavřeny v hranatých závorkách.

V následující tabulce jsou uvedeny některé výrazy XPath s predikáty, které umožňují provádět výběr v ukázkovém dokumentu XML:

Výraz XPath Výsledek
/ messages / note Vybere první prvek poznámky, který je přímým potomkem prvku zprávy.
PoznámkaA: V IE 5,6,7,8,9 bude první uzel, ale podle W3C by měl být. Chcete-li tento problém vyřešit v IE, musíte nastavit volbu SelectionLanguage na hodnotu XPath.
  V JavaScriptu: xml.setProperty ("SelectionLanguage", "XPath");
/ messages / note Vybere poslední prvek poznámky, který je přímým potomkem prvku zprávy.
/ messages / note Vybere prvek předposlední noty, který je přímým potomkem elementu zpráv.
/ messages / note Vybere všechny prvky nadpisu, které mají atribut date.
// nadpis [@ date = "10/01/2008"] Vybere všechny prvky nadpisu, které mají atribut date s hodnotou "10/01/2008"

Výběr neznámých uzlů předem

Pro nalezení dříve neznámých uzlů dokumentu XML umožňuje XPath používat speciální znaky.

V následující tabulce jsou uvedeny některé výrazy XPath se speciálními znaky, které umožňují výběr v ukázkovém dokumentu XML:

Výběr více cest

Operátor používá ve výrazu XPath můžete provádět volby několika způsoby.

V následující tabulce jsou uvedeny některé výrazy XPath, které umožňují provádět výběr v ukázkovém dokumentu XML.

Tato kapitola ukazuje základní syntaxi XPath založenou na některých příkladech.

Ukázkový dokument XML

Jako příklad bude použit následující dokument XML:

Připomenutí Pošlete dopis! 4 Připomenutí E-mail odeslán 7

Načítání dokumentu XML

Ke stažení dokumentu XML použijte objekt XMLHttpRequest, který je podporován všemi hlavními prohlížeči.

Var xmlhttp = new XMLHttpRequest ();

Ve starých prohlížečích Microsoft (IE 5 a 6) se používá kód:

Var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");

Výběr uzlu

Různé prohlížeče bohužel podporují různé způsoby práce s XPath.

Chrome, Firefox, Edge, Opera a Safari používají metodu evaluation () k výběru uzlů:

XmlDoc.evaluate (xpath, xmlDoc, , XpathResult.ANY_TYPE, null);

Aplikace Internet Explorer používá metodu selectNodes ():

XmlDoc.selectNodes (xpath);

Vyberte všechny záhlaví

Následující příklad vybere všechny uzly nadpisu:

   / zprávy / poznámka / záhlaví

Vyberte název první poznámky

Následující příklad vybere nadpis záhlaví prvního uzlu v prvku poznámky prvku zprávy:

   / zprávy / poznámka / záhlaví

Výběr všech oddělení

Následující příklad vybere text ze všech stránek v síti:

   / zprávy / poznámka / psací stůl

Vyberte oddělení s číslem větším než 4

V následujícím příkladu jsou vybrány všechny uzly stolu, které mají hodnotu větší než 4:

   / zprávy / poznámka / psací stůl

Vyberte záhlaví poznámek pro oddělení s čísly většími než 4

Následující příklad vybere všechny uzly záhlaví uzlů poznámek, jejichž element desk má hodnotu větší než 4:

   / zprávy / poznámka / záhlaví