Xpath. Základná syntax. Dopytovací jazyk XPath Príklady dotazov XPath

  • 20.06.2020

Xpath je dotazovací jazyk pre xml alebo xhtml prvky dokumentu. Podobne ako SQL, aj xpath je deklaratívny dopytovací jazyk. Ak chcete získať údaje, ktoré vás zaujímajú, stačí vytvoriť dotaz, ktorý tieto údaje popisuje. Všetku „špinavú“ prácu za vás urobí tlmočník jazyka xpath.
Veľmi pohodlné, nie? Poďme sa pozrieť na to, čo ponúka xpath pre prístup k uzlom webovej stránky.

Podanie žiadosti hostiteľom webových stránok

Dávam do pozornosti malú laboratórnu prácu, počas ktorej predvediem vytváranie xpath požiadaviek na webovú stránku. Budete môcť opakovať prosby, ktoré som dal, a čo je najdôležitejšie, pokúsiť sa splniť svoje vlastné. Dúfam, že vďaka tomu bude článok rovnako zaujímavý pre začiatočníkov a programátorov znalých xpath by xml.

Pre laboratórium potrebujeme:
- xhtml webová stránka;
- prehliadač Mozilla Firefox s doplnkami;
- ohnivák;
- firePath;
(môžete použiť akýkoľvek iný prehliadač s podporou visual xpath)
- trochu času.

Ako webovú stránku pre experiment navrhujem hlavnú stránku webu World Wide Web Consortium ("http://w3.org"). Je to táto organizácia, ktorá vyvíja jazyky xquery(xpath), špecifikáciu xhtml a mnoho ďalších internetových štandardov.

Úloha
Získajte informácie o konferencii konzorcia z xhtml kódu domovskej stránky w3.org pomocou dotazov xpath.
Začnime písať xpath dotazy.
Prvá požiadavka XPath
Otvorte záložku Firepath vo FireBug, pomocou selektora vyberte prvok, ktorý sa má analyzovať, kliknite: Firepath vytvoril dotaz xpath pre vybratý prvok.

Ak ste vybrali názov prvej udalosti, požiadavka bude vyzerať takto:

Po odstránení nepotrebných indexov bude dotaz zodpovedať všetkým prvkom typu „hlavička“.

Firepath zvýrazní prvky, ktoré zodpovedajú dopytu. V reálnom čase môžete vidieť, ktoré uzly dokumentu zodpovedajú dopytu.

Žiadosť o informácie o mieste konania konferencie:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Takto získame zoznam sponzorov:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

xpath syntax

Vráťme sa k dopytom, ktoré sme vytvorili, a uvidíme, ako fungujú.
Pozrime sa bližšie na prvú požiadavku.

V tomto dotaze som oddelil tri časti, aby som demonštroval schopnosti xpath. (Rozdelenie na časti je bežné)

Prvá časť
.// - rekurzívny zostup na nulu alebo viac úrovní hierarchie z aktuálneho kontextu. V našom prípade je aktuálny kontext koreň dokumentu.

Druhá časť
* - akýkoľvek prvok
[@id="w3c_home_upcoming_events"]– predikát, na základe ktorého hľadáme uzol, ktorý má atribút id rovný „w3c_home_upcoming_events“. ID prvkov XHTML musia byť jedinečné. Preto by dotaz „akýkoľvek prvok so špecifickým ID“ mal vrátiť jediný uzol, ktorý hľadáme.

Môžeme nahradiť * na presný názov hostiteľa div v tejto žiadosti
div[@id="w3c_home_upcoming_events"]

V strome dokumentov teda prejdeme na uzol, ktorý potrebujeme div[@id="w3c_home_upcoming_events"]. Je nám absolútne jedno, z akých uzlov sa skladá strom DOM a koľko úrovní hierarchie zostáva vyššie.

Tretia časť
/ul/li/div/p/a–xpath – cesta ku konkrétnemu prvku. Cesta pozostáva z krokov adresovania a podmienok kontroly uzla (ul, li atď.). Kroky sú oddelené "/" (lomka).

zbierky
Nie je vždy možné pristupovať k záujmovému uzlu pomocou predikátu alebo krokov adresovania. Veľmi často je na rovnakej úrovni hierarchie niekoľko uzlov rovnakého typu a je potrebné vybrať „iba prvý“ alebo „iba druhý“ uzol. Pre takéto prípady sa poskytujú zbierky.

Kolekcie xpath vám umožňujú pristupovať k prvku pomocou jeho indexu. Indexy zodpovedajú poradiu, v akom boli prvky prezentované v zdrojovom dokumente. Poradové číslo v zbierkach sa počíta od jednej.

Na základe skutočnosti, že „miesto konania“ je vždy druhý odsek po „názve stretnutia“, dostaneme nasledujúci dotaz:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Kde p je druhý prvok v množine pre každý uzol v zozname /ul/li/div.

Podobne môžeme získať zoznam sponzorov s dotazom:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Niektoré funkcie xpath
xpath má veľa funkcií na prácu s prvkami v rámci kolekcie. Uvediem len niektoré z nich.

posledný():
Vráti posledný prvok kolekcie.
Dotaz ul/li/div/p - vráti posledné odseky pre každý uzol v zozname "ul".
Funkcia first() nie je poskytnutá. Na prístup k prvému prvku použite index "1".

text():
Vráti obsah testu prvku.
.//a - získajte všetky odkazy s textom "Archív".

position() a mod:
position() - vráti pozíciu prvku v množine.
mod je zvyšok divízie.

Kombináciou týchto funkcií môžeme získať:
- ani prvky ul/li
- párne prvky: ul/li

Porovnávacie operácie

  • < - логическое «меньше»
  • > - logické "väčšie ako"
  • <= - логическое «меньше либо равно»
  • >= - logické "väčšie alebo rovné"
ul/li , ul/li - zoznam prvkov od 3. čísla a naopak.

Sám za seba

Skúste získať:
- dokonca aj URL odkazy z ľavého menu "Štandardy";
- titulky všetkých noviniek, okrem prvej z hlavnej stránky w3c.org.

Xpath v PHP5

$dom = new DomDocument(); $dom->loadHTML($HTMLCode); $xpath = new DomXPath($dom); $_res = $xpath->query(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $obj) ( echo "URL: ".$obj->getAttribute("href"); echo $obj->nodeValue; )

Konečne

Na jednoduchom príklade sme videli silu xpath na prístup k uzlom webovej stránky.
Xpath je priemyselný štandard pre prístup k prvkom xml a xhtml, xslt transformáciám.
Môžete ho použiť na analýzu akejkoľvek html stránky. Ak zdrojový html kód obsahuje významné chyby v označovaní, prejdite ho

Syntax skratky XPath

Skratky syntaxe XPath môžu byť celkom užitočné. Nižšie sú uvedené pravidlá:

Self::node() možno skrátiť ako. ;

Parent::node() môže byť skrátené ako .. ;

Child::childname možno skrátiť ako childname ;

Atribút::childname môže byť skrátený ako @childname ;

/descendant-or-self::node()/ možno skrátiť ako // .

Napríklad cesta umiestnenia .//PLANET je skratka pre self::node()/descendant-or-self::node()/child::PLANET . Predikátový výraz môžete tiež skrátiť ako , like , atď. Práca s cestami umiestnenia XPath je oveľa jednoduchšia so skrátenou syntaxou. Nasledujúci zoznam uvádza niekoľko príkladov ciest umiestnenia pomocou skrátenej syntaxe:

PLANET vracia podradené prvky kontextový uzol;

* vráti všetky podradené prvky kontextového uzla;

Text() vráti všetky podradené textové uzly kontextového uzla;

@UNITS vráti atribút UNITS kontextového uzla;

@* vráti všetky atribúty kontextového uzla;

PLANET prináša tretie dieťa kontextový uzol;

PLANÉTA prináša späť posledné dieťa kontextový uzol;

*/PLANET vracia všetky vnúčatá kontextový uzol;

/PLANETS/PLANET/NAME vráti druhý prvok tretí prvok prvok

//PLANET vráti všetky deti koreň dokumentu;

PLANETS//PLANET vracia podradené prvky detské prvky kontextový uzol;

//PLANET/NAME vráti všetky prvky ktoré majú rodiča

Vráti samotný kontextový uzol;

.//PLANET vracia podradené prvky kontextový uzol;

Vráti rodiča kontextového uzla;

../@UNITS vráti atribút UNITS rodiča kontextového uzla;

.//.. vráti všetkých rodičov potomka kontextového uzla a rodiča kontextového uzla;

PLANET prinavracia deti ;

PLANET prinavracia deti Kontextový uzol, ktorý má deti s textom rovným „Venuša“;

PLANET[@UNITS="days"] vráti všetky deti Kontextový uzol, ktorý má atribút UNITS s hodnotou „dní“;

PLANET[@UNITS="days"] vracia šieste dieťa Kontextový uzol iba vtedy, ak má tento potomok atribút UNITS s hodnotou „dní“. Môžete tiež napísať PLANET[@UNITS="dni"] ;

PLANET[@COLOR and @UNITS] vráti všetky deti Kontextový uzol, ktorý má atribúty COLOR a UNITS;

" //PLANET " vyberie všetky prvky ktorých hodnota je odlišná od hodnoty ktoréhokoľvek predchádzajúceho prvku

* vyberie ľubovoľný prvok , ktorá je prvým dieťaťom svojho rodiča;

*[@UNITS] vyberie prvých päť potomkov kontextového uzla, ktoré majú atribút UNITS.

Z knihy Manipulácia s databázami pomocou Visual Basic® .NET autora McManus Geoffrey P

Z knihy Programovanie v jazyku Ruby [Jazyková ideológia, teória a prax aplikácie] autor Fulton Hal

Z autorovej príručky PHP

Z knihy XSLT autora Holzner Štefan

Skrátená syntax Existujú dve pravidlá pre skratky osí pre vzory: child::childname môže byť skrátené ako childname; Atribút::childname môže byť skrátený ako @childname. Nasledujúci zoznam uvádza množstvo príkladov skrátených vzorov syntaxe; na konci kapitoly uvidíte

Z knihy XSLT Technology autora Valikov Alexej Nikolajevič

Skrátená syntax predikátu Predikátové výrazy možno skrátiť vynechaním "position()=". Napríklad sa stáva, stáva sa atď. Použitie skrátenej syntaxe značne uľahčuje používanie výrazov XPath v predikátoch. Tu je riadok

Z knihy C++. Zbierka receptov autora Diggins Christopher

Z knihy autora

Čísla XPath XPath ukladá čísla vo formáte s pohyblivou rádovou čiarkou s dvojitou presnosťou. Podľa formálnej definície musia byť čísla XPath uložené v 64-bitovom formáte IEEE 754 s dvojitou presnosťou s pohyblivou rádovou čiarkou a všetky čísla sú uložené ako čísla s pohyblivou rádovou čiarkou.

Z knihy autora

Aplikácia osí XPath Doteraz sme pokryli tri časti krokov umiestnenia – os, podmienku uzla a predikát. Tieto prvky by ste mali poznať z našej práce so vzormi výberu, ale všimnite si os v predchádzajúcom príklade, predchádzajúca-súrodenec. Stále

Z knihy autora

Testovanie výrazov XPath Balík Xalan obsahuje praktický vzorový program ApplyXPath.java, ktorý vám umožňuje použiť výraz XPath na dokument a pozrieť sa na výsledok, čo je veľmi užitočné pri testovaní. Ak chcete spustiť tento príklad, budete musieť skompilovať ApplyXPath.java do ApplyXPath.class

Xpath- deklaratívny dopytovací jazyk k prvkom xml alebo (x)html dokument a xslt transformácií.

Užitočné zdroje:

Úplná špecifikácia pre Xpath 1.0 v ruštine tu - http://citforum.ru/internet/xpath/xpath.shtml.

Online tester Xpath – http://www.xpathtester.com/xpath/

Použitie Xpath vo Firebug

Na vyhľadávanie prvkov DOM pomocou Xpath má Firebug zabudovanú funkciu:

$x(xpath [, contextNode [, resultType]])

Typ výsledku:

XPathResult.NUMBER_TYPE XPathResult.STRING_TYPE XPathResult.BOOLEAN_TYPE XPathResult.FIRST_ORDERED_NODE_TYPE XPathResult.UNORDERED_NODE_ITERATOR_TYPE

Príklad použitia dotazov XPATH vo Firebug:

$x("//tr[@data-place]/@data-place").value $x("string(//tr[@data-place]/@data-place)")

Príklady

//div //a //*/predok-alebo-seba::tlačidlo

Základná syntax

Spôsoby

. # aktuálny kontext.// # rekurzívne zostupovať (nula alebo viac úrovní z aktuálneho kontextu) /html/body # tabuľka absolútnej cesty//a # relatívna cesta a # cesta vzhľadom k aktuálnemu kontextu //* # všetko v aktuálnom kontexte li/* /a # odkazy, ktoré sú "vnúčatami" li //a|//tlačidlo # odkazy a tlačidlá (kombinujúce dve sady uzlov)

Vzťahy

a/i/parent::p # bezprostredný rodič,

p/predok::* # všetci rodičia (http://bit.ly/1ta7mh9) p/nasledujúci-súrodenci::* # všetci nasledujúci súrodenci p/predchádzajúci-súrodenci::* # všetci predchádzajúci súrodenci p/nasledujúci::* # všetky nasledujúce prvky okrem potomkov (http://bit.ly/1ta83H5) p/preceding::* # všetky predchádzajúce prvky okrem predkov p/potomok-alebo-ja::* # kontextový uzol a všetci jeho potomkovia p/predok- or-self::* # kontextový uzol a všetci jeho predkovia

Získavanie uzlov

/div/text() # získať textové uzly /div/text() # získať prvý textový uzol

Poloha prvku

a # prvý prvok a # posledný prvok a[i] # druhý odkaz, ktorý obsahuje prvok a # Prvé 3 odkazy ul # a zoznam (UL), ktorého prvý prvok obsahuje hodnotu "OK" tr # nie párne prvky tr # párne prvky p/text() # druhý textový uzol

Atribúty a filtre

Označuje filtračné prvky

Vstup[@type=text] # atribúty majú predponu @ input[@class="OK"] # p # odsekov bez atribútov *[@style] # všetky prvky s atribútom style a[. = "OK"] # odkazy s hodnotou "OK" a/@id # ID odkazov a/@* # všetky atribúty odkazov a[@id a @rel] # odkazy, ktoré obsahujú atribúty id a rel a[@id][ @rel] # to isté a # odkazy obsahujú prvok alebo

Funkcie

Základné funkcie Xpath – http://www.w3.org/TR/xpath/#corelib

Name() # return name element string(val) string(a/@id) # get value value substring(val, from, to) substring(@id, 1, 6) # cut part of the string substring-after(val, from ) substring-after(@id, "FROM") substring-before string-length() # vráti počet znakov v reťazci count() # vráti počet prvkov concat() normalize-space() # podobne ako trim, odstraňuje medzery Príklad: begin -with() obsahuje() translate("bar","abc","ABC") # BAr

Matematika

//p[ position() = floor(last() div 2 + 0.5) or position() = strop(last() div 2 + 0.5) ] //tr position() # div # division mod # zvyšok rozdelenia stropu () # minimálna celočíselná spodná hranica() # maximálne celé číslo zaokrúhlená() súčet()

Zoskupovanie

(table/tbody/tr) # posledný riadok zo všetkých tabuliek (//h1|//h2) # nadpis prvej alebo druhej úrovne, ktorý obsahuje "Text"

Podmienky zloženého filtra

XPath používa výrazy cesty na výber uzlov a sád uzlov v dokumente XML. Uzol sa vyberie sledovaním vopred určenej cesty alebo takzvaných krokov.

Vzorový dokument XML

Na demonštráciu syntaxe XPath sa použije nasledujúci dokument XML:

Pripomenutie Ak chcete poslať list!

Re: Pripomienka List odoslaný

Výber uzla

Na výber uzlov v dokumente XML používa XPath výrazy cesty. Uzol sa vyberie podľa danej cesty. Najužitočnejšie výrazy cesty:

Nasledujúca tabuľka uvádza niektoré výrazy XPath, ktoré vám umožňujú vykonať niektoré výbery vo vzorovom dokumente XML:

výraz XPath Výsledok
správy Vyberie všetky uzly s názvom "správy"
/správy Vyberie koreňový prvok správ
Poznámka: Ak cesta začína lomkou (/), potom vždy predstavuje absolútnu cestu k prvku!
správy/poznámka Vyberie všetky prvky poznámky, ktoré sú potomkami prvku správy
// Poznámka Vyberie všetky prvky poznámky bez ohľadu na to, kde sa v dokumente nachádzajú
správy//poznámka Vyberie všetky prvky poznámky, ktoré sú potomkami prvku messages, bez ohľadu na to, kde sa nachádzajú v prvku messages
//@dátum Vyberie všetky atribúty s názvom dátum

Predikáty

Predikáty vám umožňujú nájsť konkrétny uzol alebo uzol s konkrétnou hodnotou.

Predikáty sú vždy uzavreté v hranatých zátvorkách.

Nasledujúca tabuľka uvádza niektoré výrazy XPath s predikátmi, ktoré umožňujú výber podľa vzorového dokumentu XML:

výraz XPath Výsledok
/správy/poznámka Vyberie prvý prvok poznámky, ktorý je priamym potomkom prvku správy.
Poznámka: V IE 5,6,7,8,9 by prvý uzol bol , ale podľa W3C by mal byť . Ak chcete vyriešiť tento problém v IE, musíte nastaviť voľbu SelectionLanguage na XPath.
V JavaScripte: xml.setProperty("SelectionLanguage","XPath");
/správy/poznámka Vyberie posledný prvok poznámky, ktorý je priamym potomkom prvku správy.
/správy/poznámka Vyberie predposledný prvok poznámky, ktorý je priamym potomkom prvku správy.
/správy/poznámka Vyberie všetky prvky nadpisu, ktoré majú atribút dátumu
//nadpis[@date="10/01/2008"] Vyberie všetky prvky nadpisu, ktoré majú atribút dátumu s hodnotou "10/01/2008"

Výber predtým neznámych uzlov

Na nájdenie predtým neznámych uzlov v dokumente XML umožňuje XPath použitie špeciálnych znakov.

Nasledujúca tabuľka uvádza niektoré výrazy XPath so špeciálnymi znakmi, ktoré umožňujú výber podľa vzorového dokumentu XML:

Výber viacerých ciest

Pomocou operátora | vo výraze XPath vám umožňuje vybrať viacero ciest.

Nasledujúca tabuľka uvádza niektoré výrazy XPath, ktoré vám umožňujú vykonávať výbery vo vzorovom dokumente XML.




Webová stránka počítačovej pomoci

© Copyright 2022,
rzdoro.ru – stránka počítačovej pomoci

  • Kategórie
  • Železo
  • Windows 10
  • Skenovanie
  • Windows 7
  • Železo
  • Windows 10
  • Skenovanie
  • Windows 7