Příklady XPath - cheat sheet pro analýzu stránek. Získejte hodnotu konkrétního rozpětí podle třídy

Je samozřejmé a ve všech knihách se píše, že k nalezení prvku je nejlepší a nejrychlejší použít lokátory ID a Name a, což je typické, jsou s nimi uvedeny hlavní příklady použití lokátorů a práce se Selenium. Ale v reálný životČasto se stává, že id prvků se tvoří dynamicky, a proto jsou na něj všechny vazby zbytečné, třída může mít na stránce desítky zástupců a může chybět jméno. Jak jste možná uhodli, v tomto případě musíte použít xpath a css lokátory. V tomto článku nebudu hovořit o nějaké nadřazenosti nad css nebo srovnávat výkon, jen vám řeknu, proč používám xpath a jak by se to mělo dělat. Dopisů bude hodně, protože jsem kdysi musel dost prohledávat internet, abych získal informace, které jsem potřeboval, zveřejňuji všechny ty nejužitečnější v naději, že to někomu pomůže při používání xpath lokátorů. Je důležité, abyste vy, můj čtenář, měli alespoň malou představu o xpath, pokud ji nemáte, můžete.

Nejprve o tom, proč začátečníci (a nejen) nemají rádi xpath:

  1. Od dob galaxie daleko, daleko existuje mýtus, že xpath je mnohonásobně pomalejší než css, což je tento momentčas není pravdivý. Nevím, jak to bylo dříve, ale v těchto dnech jsem osobně napsal několik testů pomocí xpath a css a jejich porovnáním mohu říci, že neexistuje žádná významná výhoda a někdy je dokonce xpath rychlejší. Nebudu se pouštět do dlouhé bitvy o rychlost, jen rozdíl několika milisekund nelze považovat za významný, zvláště když celkové trvání UI testy.
  2. Xpath je zneužíván, z velké části kvůli tomu, že standardní vývojářské panely a pluginy vytrhávají xpath ze stránky v naprosto obscénní podobě, která je nepohodlná a nečitelná. Mnozí proto zastávají názor, že xpath je hloubavý a nepochopitelný nesmysl.
  3. Ne, nebo jsem alespoň nenarazil na žádný rozumný návod k xpath, většinou nabízejí odkazy pdf soubor kde jsou lokátory uvedeny ve svazku společně s CSS, což je druh shrnutí, kterému jsem si jistý, že jen málo lidí rozumí jen kvůli množství informací.

A nyní o tom, jak se věci skutečně mají a jaké jsou výhody xpath, pokud je používán správně:

— není nižší (nebo mírně horší) v rychlosti css

- je přehledný a snadno čitelný, můžete s ním pochopit, který prvek mluvíme o tom

- je podobný programovacímu jazyku a jeho použití je pohodlné

— můžete se dostat k nejskrytějším prvkům stránky díky vybudovaným řetězcům vztahů

Takže pár pravidel používáníxpath :

  1. Nikdy nepoužívejte pluginy ani nekopírujte xpath z kódu stránky pomocí prohlížeče nebo webového vývojáře. Zde je například návod, jak plugin Firefox zobrazuje jeden odkaz: //header/div/ul/li/a. Je z tohoto odkazu jasné, o jakém prvku je řeč a co hledáme? Občas se totiž stane, že při pohledu na lokátor v kódu nebo v textu výjimky potřebujeme pochopit, o jakém prvku mluvíme. Jak se to dá z takového řádku pochopit? To ani nemluvím o tom, že jakýkoli kód založený na takových lokátorech spadne při každé ráně vánku. Pokaždé, když napíšete lokátor, jako je tento// div / div / ul / li(mohl bych pokračovat dlouho) Na světě umírá něco dobrého!!! Pokud chcete, je to podělaný kód testeru, který je třeba vypálit horkou žehličkou.
  2. Snažte se psát xpath co nejstručněji a nejsrozumitelněji, využijte jeho možností a podobnosti s programovacím jazykem, abyste i po měsíci pochopili, o jakém prvku mluvíme a co je potřeba opravit, pokud se rozložení změní
  3. Xpath má svůj čas a místo! Pokud je možné použít id, jméno nebo přidat id do kódu, udělejte to!
  4. Místo dlouhého řetězce lomítek, jak je uvedeno výše, použijte vztahy prvků: předek, potomek, sesterský prvek
  5. Můžete a měli byste používat logiku a operace, ne, nebo
  6. Normální xpath vždy začíná // a nepoužívá filtry s číslem prvku ve stylu (např // div)

Pojďme k podnikání a praxi, xpath, která je naznačena výše ( //header/div/ul/li/a) lze skutečně specifikovat ve formuláři //A. Souhlaste, že je rozdíl v délce textu a v jeho chápání, protože zde z tagu vidíte, že se jedná o odkaz a jeho text – Cena. To znamená, že tento prvek můžete na stránce vizuálně najít sami a v případě výjimky s takovým lokátorem okamžitě víte, co a kde hledat!

Nyní o těch příkazech, které vám budou opravdu užitečné pro psaní kompetentních a pohodlných lokátorů:

Jak vidíte, id je jasně generováno a nelze se na něj vázat, třída také nevzbuzuje důvěru, navíc Selenium neumožňuje použití složitých jmen v lokátoru className, ale je zde text, který řeší problém: // A

  • obsahuje( parametr, povinný) –vrací prvek, pokud obsahuje hledaný, známý příkaz, že? V programovacích jazycích to vidíte pořád. Je velmi vhodné použít ve spojení s text(), pokud vytváříme složitý lokátor a neznáme přesně celý text, například: // div[@class='tlačítka'aobsahuje(text(),'Uložit')]– jak vidíte, je to nějaký prvek, který patří k tlačítkům a je na něm text Uložit. Představte si, že vaše testovaná webová aplikace má několik stránek, které mají tlačítko pro uložení, ale s různé texty– uložit soubor, uložit graf, uložit zprávu atd. Nemusíte psát lokátory pro všechny, stačí jeden pro všechna tlačítka pro uložení a je to popsáno výše. Pozor na použití dvou podmínek najednou ve filtru!

Navíc velmi užitečná příležitost– jde o vyhledání prvku podle jednoho ze slov v názvu třídy.

Vše se řeší takto: //div, to znamená, že hledáme prvek, který má ve své třídě nějakou jedinečnou kombinaci slov. Tato příležitost obsahuje hodně pomáhá v nejvíce různé situace! Vezměte prosím na vědomí, že parametr a hledaný objekt jsou odděleny čárkami, nelze napsat include(text()=’smth’)

  • začíná-with(parametr, hledání)– vše je podobné jako obsahuje, pouze tento příkaz vrací prvky začínající hledaným. Pokud se vrátíme k příkladu s tlačítky pro uložení, lze lokátor přepsat takto // div[@class='tlačítka'azačíná-s(text(),'Uložit')] O nic nepřijdeme, protože slovo uložit je obvykle první slovo na tlačítku, což znamená, že lokátor bude opět fungovat pro všechna tlačítka uložení. Obecně se jedná o užší formu obsahuje

Nyní přichází na řadu příkazy pro vztahy mezi prvky (předek, rodič, dítě, potomek, sesterský prvek), které při správném použití umožňují velmi flexibilně najít téměř jakýkoli prvek na stránce.

Formát použití //počáteční prvek/relace::tag(filtr) koncového prvku. Věnujte pozornost dvěma dvojtečkám za vztahem a nezapomeňte za dvojtečkami uvést značku, nebo ještě lépe filtr prvku, který hledáte, protože potomků může být mnoho, ale my potřebujeme konkrétního.

Potřebujeme zadat text do vstupu, ale jak vidíte, je zde řada problémů - id je dynamické, na stránce je spousta tříd a generovaných id se slovním vstupem, zdá se, že nic není připojit se k. Existuje však prvek s textem, který je pro stránku jedinečný, takže se ho držme:

// div[text()='Předmět']/předcházející-sourozenec::vstup— nejprve najdeme jedinečný prvek s textem a poté hledáme jeho předchozí sesterský prvek, čímž vytvoříme filtr, který objasní, co přesně hledáme pro vstup. Další příklad:

Musíme kliknout na tlačítko, které nemá žádný text, pouze ikonu, ale jak vidíte, stále má stejné problémy s id a navíc existuje spousta tříd stejného jména. Zachraňuje nás to, že předchozí prvek má jedinečný název třídy, takže z něj budeme tančit: //div/following-sibling::div– najdeme prvek, který má v názvu třídy jedinečné slovo a z něj již hledáme další sesterský prvek, s tag div. Mějte na paměti, že i když existuje mnoho sesterských prvků s tagem div, bude vrácen pouze ten úplně první!

Představme si, že přímo potřebujeme prvek s id=__vz4019, pro každého na tomto obrázku je to rodič a lze jej tedy vytáhnout přes kterýkoli z nich, např. // div[text()='Předmět']/rodič::div

Mimochodem, apel na nadřazený prvek, lze nahradit dvěma tečkami a bez štítku, jako je tento // div[text()='Předmět']/..

Protože všechny prvky v příkladu jsou děti, můžete kterýkoli z nich najít od rodiče takto:

//div/child::input – najdeme rodiče a od něj hledáme dítě se vstupní značkou.


Potřebujeme složku se specifickým názvem, ale rozložení je organizováno tak, že samotný text není obsažen v prvku třídy složky, takže musíme nejprve najít třídu a poté odfiltrovat tu, která má požadované text v jeho potomcích:

// div[@class='listitemSložka']/potomek::rozpětí[text()='Složkanázev'] - nejprve najdeme třídu folder, pak se podíváme mezi její potomky span tag a text, který potřebujeme. Možná se ptáte, proč nehledat jen podle textu? Faktem je, že na stránce může být více prvků s takovým textem, ale potřebujeme složku.

Mimochodem, místo toho potomek můžete použít dvojité lomítko // to znamená - jakýkoli vnořený prvek. Výše uvedený příklad se stává

// div[@class='listitemSložka']// rozpětí[text()='Složkanázev']

  • předek- předek, opět odlišný od rodiče tím, že může být jakkoliv vzdálený, tedy pradědeček. Pokud se vrátíme k předchozímu příkladu, můžete najít prvek složky podle textu takto: // rozpětí[text()='Složkanázev']/předek::div[@class='listitemSložka']

Je důležité pochopit, že je možné, ale vysoce nežádoucí, použít několik vztahů v jednom lokátoru, například:

// div[@class='Jeden]/dítě::div[@class='Dva']/potomek ::vstup[@class='Tři]. Takový lokátor bude fungovat, ale je již obtížně čitelný a s největší pravděpodobností je možné vybrat jiný, není třeba jej používat, pokud to není nutné, pamatujte na pravidlo číslo 2. Je zcela nepřijatelné používat obrácené vztahy v jednom lokátoru , tedy nejprve hledejte potomka, poté jeho předka, nebo naopak.

To jsou všechny příkazy a vztahy, které budete potřebovat při psaní lokátorů! Ano, jsou i další, můžete si je přečíst v návodu přiloženém na začátku článku, ale já je prakticky nepoužíval a ty uvedené v článku mi dodnes stačí.

Používejte tedy dané příkazy, hledejte správné prvky, dodržujte výše uvedená pravidla a nebudete mít problémy s psaním kompetentních lokátorů, které jsou snadno srozumitelné, čitelné a správné. A hlavně to pochopíte xpath velmi vhodné pro psaní lokátorů pro jakékoli prvky.

Základy

XML má stromovou strukturu. Dokument má vždy kořenový prvek (instrukcenemá se stromem nic společného). Prvek stromu má vždy potomky a předky, kromě kořenový prvek, který nemá žádné předky, stejně jako slepé prvky (listy stromů), které nemají potomky. Každý prvek stromu je umístěn na určitou úroveň hnízdění (dále jen „úroveň“). Prvky na stejné úrovni mají předchozí a následující prvky.

To je velmi podobné organizování adresářů v souborový systém, a řádky XPath jsou ve skutečnosti cesty k „souborům“ - prvkům.

Zvažte například dokument XHTML:

<html > <tělo > <div > První vrstva<rozpětí > blok textu v první vrstvě</span> </div> <div > Druhá vrstva</div> <div > Třetí vrstva<span class = "text" > první blok ve třetí vrstvě</span> <span class = "text" > druhý blok ve třetí vrstvě</span> <rozpětí > třetí blok ve třetí vrstvě</span> </div> <img / > </body> </html>

cesta XPath /html/body/*/span[@class] (úplná syntaxe vypadá jako /child::html/child::body/child::*/child::span) bude v něm odpovídat dvěma prvkům zdrojového dokumentu - první blok ve třetí vrstvě A druhý blok ve třetí vrstvě .

Cesta se dělí na řešení kroků, které jsou odděleny lomítkem / . Každý krok adresování se skládá ze tří částí:

  • osa (v v tomto příkladu dítě::), toto je povinná součást;
  • podmínka pro kontrolu uzlů (v tomto příkladu se jedná o názvy prvků html dokument, tělo, rozpětí a symbol * znamenají prvek s libovolným názvem), také povinná část;
  • predikát (v tomto příkladu atribut::class), volitelná část obsažená v hranaté závorky, který může obsahovat osy, testovací podmínky, funkce, operátory (+, -,<, >atd.).

Analýza se provádí zleva doprava. Je-li prvním znakem / , pak je cesta adresování považována za absolutní (tj. z kořene dokumentu). V tomto případě se jako kontextový uzel v prvním kroku použije kořenový prvek (html). Kontext je určitý referenční bod, vzhledem k němuž se vypočítává další krok adresování. Proto v každém kroku adresování dostaneme nová sada uzly dokumentu a tato sada se stane kontextem pro další krok adresování.

Ve druhém kroku adresování (child::body) se kontext stane prvkem html. Dítě:: osa říká najít všechny bezprostřední děti html prvek a podmínka kontroly těla říká, že všechny uzly s názvem tělo musí být zahrnuty do vygenerované sady prvků. Během druhého kroku adresování získáme sadu uzlů skládající se pouze z jednoho prvku těla, který se stane prvkem kontextu pro třetí krok.

Třetí krok adresování: dítě::* . Podřízená osa:: shromažďuje všechny bezprostřední potomky prvku body a podmínka kontroly * říká, že vygenerovaná sada musí obsahovat prvky hlavního typu s libovolným názvem. Během tohoto kroku získáme sadu uzlů sestávající ze tří prvky div a jeden prvek img.

Čtvrtý krok adresování: child::span . Nyní je kontext souborem čtyř prvků. A další sada uzlů je vytvořena ve čtyřech průchodech (ve čtyřech iteracích). Při první iteraci se první div stane kontextovým uzlem. Podle dané osy potomka:: a pravidla kontroly rozpětí obsahuje sada bezprostřední potomky prvku div, jehož jméno se rovná rozpětí. Při druhé iteraci se do sady nic nepřidá, protože druhý div nemá žádné potomky. Třetí iterace přidá tři prvky span do sady najednou, ale čtvrtá nepřidá nic, protože prvek img nemá žádné potomky. Takže během testu byla získána sada uzlů sestávající ze čtyř rozpětí prvků. Toto bude kontext pro následné zpracování.

Neexistuje žádný další krok, takže vybraná sada bude filtrována. To je rozdíl mezi predikáty a kroky adresování. V každém kroku adresování získáme novou množinu, počínaje kontextem získaným na předchozí krok. Při predikátovém zpracování je z aktuální množiny získána nová množina pomocí metody filtrování, kdy jsou ze množiny vyloučeny uzly, které nesplní testovací podmínku. V v tomto případě Atribut:: osa označuje potřebu zkontrolovat, zda kontextové uzly mají atributy, a podmínka třídy vyžaduje ponechání pouze těch uzlů, které mají atribut pojmenovaný class. Filtrování probíhá ve čtyřech iteracích, ale v konečné sadě jsou zahrnuty pouze dva prvky rozsahu.

Nápravy

Osy jsou základna jazyk XPath.

  • předek::- Vrací mnoho předků.
  • předek nebo já::- Vrátí množinu předků a aktuální prvek.
  • atribut::- Vrátí sadu atributů aktuálního prvku.
  • dítě::- Vrátí sadu dětí o úroveň níže.
  • potomek::- Návraty kompletní set potomci.
  • potomek-nebo-já::- Vrátí kompletní sadu potomků a aktuální prvek.
  • Následující::- Vrátí nezpracovanou sadu pod aktuálním prvkem.
  • následující sourozenec::- Vrátí sadu prvků na stejné úrovni po aktuální.
  • jmenný prostor::- Vrátí sadu, která má jmenný prostor (to znamená, že je přítomen atribut xmlns).
  • rodič::- Vrátí předka o úroveň zpět.
  • předchozí:- Vrátí množinu zpracovaných prvků kromě množiny předků.
  • předchozí sourozenec::- Vrátí sadu prvků na stejné úrovni, která předchází aktuální.
  • já::- Vrátí aktuální prvek.

Pro některé osy existují zkratky, například:

  • atribut::- lze nahradit «@»
  • dítě::- často jednoduše vynechaný
  • potomek::- lze nahradit «.//»
  • rodič::- lze nahradit «..»
  • já::- lze nahradit «.»

Dodatek k databáze je sada funkcí, které jsou rozděleny do 5 skupin:

Systémové funkce

node-set dokument(object, node-set?) Vrátí dokument určený parametrem object. tětiva formát-číslo(číslo, řetězec, řetězec?) Formátuje číslo podle vzoru uvedeného ve druhém parametru, třetí parametr určuje formát pojmenovaného čísla, který se má vzít v úvahu. tětiva generovat-id(node-set?) Vrátí řetězec, který je jedinečným identifikátorem. node-set klíč(řetězec, objekt) Vrací množinu s zadaný klíč(podobně jako funkce id pro identifikátory). tětiva neanalyzovaný-entity-uri(string) Vrátí neanalyzované URI, pokud žádné není, vrátí prázdný řetězec. booleovský prvek-dostupný(řetězec) Zkontroluje, zda je prvek nebo sada zadaná v parametru dostupná. Parametr je považován za XPath. booleovský funkce-dostupná(řetězec) Zkontroluje, zda je funkce zadaná v parametru dostupná. Parametr je považován za XPath. objekt vlastnost systému(řetězec) Parametry vracející systémové proměnné mohou být: * xsl: version - vrací XSLT verzi procesoru. * xsl: vendor - vrátí výrobce procesoru XSLT. * xsl: vendor-url – vrací URL identifikující výrobce. Pokud je použit neznámý parametr, funkce vrátí prázdný řetězec. booleovský lang(řetězec) Vrací hodnotu true, pokud má aktuální značka atribut xml:lang nebo nadřazená značka má atribut xml:lang a je zadán znak odpovídající řetězci.

Funkce s množinami

  • * - označuje žádný jméno nebo znaková sada, @* - libovolný atribut
  • $name - přístup k proměnné, kde name je název proměnné nebo parametru.
  • - dodatečné podmínky Vzorky
  • () - pokud je použit uvnitř tagu jiného jazyka (například HTML), pak XSLT procesor zachází s obsahem složených závorek jako s XPath.
  • / - definuje úroveň stromu
node-set uzel() Vrátí všechny uzly. Pro tuto funkci se často používá náhrada "*", ale na rozdíl od hvězdičky vrací node() a text uzly. tětiva text() Vrací sadu textových uzlů; node-set aktuální() Vrátí sadu jednoho prvku, který je aktuální. Pokud zpracováváme množinu s podmínkami, pak jediným způsobem, jak se z této podmínky dostat k aktuálnímu prvku, je tato funkce. číslo pozice() Vrátí pozici prvku v množině. Funguje správně pouze ve smyčce číslo poslední() Vrátí číslo posledního prvku v sadě. Funguje správně pouze ve smyčce číslo počet(množina uzlů) Vrací počet prvků v sadě uzlů. tětiva název(node-set?) vrátí celé jméno první štítek v sadě. tětiva jmenný prostor-uri(node-set?) Vrátí odkaz na adresu URL definující jmenný prostor. tětiva místní název(node-set?) Vrátí název první značky v sadě, bez jmenného prostoru. node-set id(objekt) Najde prvek s jedinečným identifikátorem

Řetězcové funkce

tětiva tětiva(objekt?) Vrátí textový obsah prvku. V podstatě vrací kombinovanou sadu text prvky na jeden nižší úroveň. tětiva konkat (řetězec, řetězec, řetězec*) Zřetězí číslo dvou nebo více řetězců délka řetězce (řetězec?) Vrátí délku řetězce. booleovský obsahuje (řetězec, řetězec) Vrací hodnotu true, pokud první řetězec obsahuje druhý, a v opačném případě hodnotu false. tětiva podřetězec (řetězec, číslo, číslo?) Vrací řetězec vystřižený z řetězce začínajícího od zadané číslo a pokud je zadáno druhé číslo, počet znaků. tětiva podřetězec-před (řetězec, řetězec) Pokud je v prvním nalezen druhý řetězec, vrátí řetězec až k prvnímu výskytu druhého řetězce. tětiva podřetězec-po (řetězec, řetězec) Pokud je v prvním nalezen druhý řetězec, vrátí řetězec po prvním výskytu druhého řetězce. booleovský začíná s (řetězec, řetězec) Vrátí hodnotu true, pokud se druhý řetězec vyskytuje na začátku prvního, jinak vrátí hodnotu false. booleovský končí s (řetězec, řetězec) Vrátí hodnotu true, pokud je druhý řetězec na konci prvního, jinak vrátí hodnotu false. tětiva normalizovat-prostor (řetězec?) Odstraní nadbytečné a opakované mezery a řídicí znaky a nahradí je mezerami. tětiva(řetězec, řetězec, řetězec) Nahradí znaky prvního řetězce, které se objeví ve druhém řetězci, odpovídajícími pozicemi znaků z druhého řetězce znaky ze třetího řetězce. translate("bar", "abc", "ABC") vrátí BAr.

Logické funkce

  • nebo - logické "nebo"
  • a - logické "a"
  • = - logické „rovná se“
  • < (<) - логическое «меньше»
  • > (>) - logické „větší než“
  • <= (<=) - логическое «меньше либо равно»
  • >= (>=) - logické „větší než nebo rovno“
booleovský booleovský(objekt) Přinese objekt booleovský typ; booleovský skutečný() Vrátí true. booleovský Nepravdivé() Vrací false. booleovský ne(boolean) Negace, vrací true, pokud je argument nepravdivý a naopak.

Číselné funkce

  • + - sčítání
  • − - odčítání
  • * - násobení
  • div - pravidelné dělení (ani dělení!)
  • mod - zbytek dělení
číslo číslo(objekt?) Převede objekt na číslo. číslo součet(node-set) Vrací součet množiny, každá značka množiny bude převedena na řetězec a bude z ní získáno číslo. číslo podlaha(číslo) Vrátí největší celé číslo, které není větší než argument. číslo strop(číslo) Vrátí nejmenší celé číslo, které není menší než argument. číslo kolo(číslo) Zaokrouhlí číslo podle matematických pravidel.

Odkazy

  • XPath 1.0. Doporučení W3C. (Angličtina)
  • XPath 2.0. Doporučení W3C. (Angličtina)
  • XPath 2.1. Doporučení W3C. (Angličtina)
  • výukový program XPath (německy)

Rozhodl jsem se mrknout na článek o XPath. Proč potřebuji XPath? Mám za úkol zorganizovat předzpracování dat: Existuje například soubor operací popsaných dokumentem XML. Každá operace je buď webový požadavek, nebo databázový požadavek. Potřebuji nahradit pole z předchozích operací do operací následujících... Něco takového.

50 ... zde musím použít hodnotu prvku požadavku z operace id="1"

Zkusím to vyjádřit jinak. XPath je dotazovací jazyk XML, který vám umožňuje vybrat podmnožiny dat z XML: jak individuální hodnoty tagy a atributy, stejně jako celé sady hodnot. Požadavek XPath + odpovídající obraty API libovolné XML dokument do jakési databáze, ze které lze provádět výběry.

V mém případě jsem potřeboval vybrat některá pole z XML, abych vygeneroval další XML dokumenty obsahující zadaná pole. Tento problém lze samozřejmě vyřešit bez XPath. Ale pak bude logika pevně zapojena do programového kódu. A XPath umožňuje přenést vyhledávací logiku uvnitř XML dokumentů na externí konfigurační data. Tito. Pro můj program jsou vstupními daty jak dokumenty XML, tak výrazy XPath. V této kombinaci přichází do hry síla XPath.

P.S. Následně jsem kromě teoretické části napsal několik popisujících příspěvků praktická aplikace XPath v Javě:

Toto je předmluva. Začněme studovat. Nehledají dobro od dobra. Nejzajímavější stránkou pro XML technologie je zatím w3schools.org. Proto odtud jednoduše přeložím tutoriál XPath.

    • Použití XPath v Javě

XPath se používá k navigaci mezi prvky a Atributy XML dokument. XPath zaujímá přední místo mezi standardy W3C XSLT. XQuery a XPointer jsou oba založeny na výrazech XPath.

Co je XPath?

  • XPath - syntaxe pro definování částí dokumentu XML
  • XPath používá výrazy cesty k navigaci v dokumentech XML
  • XPath obsahuje knihovnu standardních funkcí
  • XPath základní prvek v XSLT
  • XPath má stav doporučení W3C

Výrazy cesty XPath

XPath používá výrazy cesty k výběru uzlů nebo sad uzlů XML dokument. Výrazy cesty se velmi podobají cestám, které používáte při práci s tradičními počítačovými systémy souborů.

Standardní funkce XPath

XPath obsahuje více než 100 vestavěných funkcí. Tyto funkce jsou pro hodnoty řetězců, číselné hodnoty, porovnávání časů a dat, manipulaci s uzly a QName, manipulaci se sekvencemi, práci s booleovskými hodnotami a další.

XPath je jedním z Klíčové body na cestě k pochopení XSLT. A nejprve chci mít nějaký jednoduchý způsob, jak s tím experimentovat, abych podrobně pochopil, jak to funguje. Tato metoda však není dodržována. Buď si musíte stáhnout zcela zdarma editory XML/XSLT, nebo se spokojit se statickými obrázky ze zvon.org. Možná jsem špatně hledal. Ale z mého pohledu je to přesně tak. A když jsem znovu stál před úkolem „Vysvětlit XSLT“, v hlavě se mi zrodila myšlenka na malou službu. Poté, co vše fungovalo, bylo rozhodnuto jej uvést do běžného použití: Pravděpodobně nejsem jediný, kdo se setkal s podobnými problémy.

Jak to funguje

Vše je jednoduché až k ostudě: zadáváme XML pro experimenty, píšeme požadavek a sledujeme výsledek během psaní. Vypadá to nějak takto:

Nicméně, proč se dívat na obrázky, můžete jít a cítit to všechno naživo.

Služba však může být užitečná nejen pro vzdělávací účely. Často je vhodné záludné dotazy sledovat vizuálně. Služba si se svým úkolem poradila. Budu rád, když to pomůže i někomu dalšímu.




Horní