Bio sam u front-end razvoju dovoljno dugo da vidim trend tokom godina: mlađi programeri koji rade s novom paradigmom programiranja bez razumijevanja njenog istorijskog konteksta. Naravno, sasvim je razumljivo ne znati nešto. Web je veoma veliko mesto sa raznolikim skupom veština i specijalnosti, a mi ne znamo uvek šta ne znamo. Učenje u ovoj oblasti je kontinuirano putovanje, a ne nešto što se jednom dogodi i završi. Slučaj: Neko iz mog tima je pitao da li je moguće utvrditi da li se korisnici kreću dalje od određene kartice u korisničkom sučelju. Istaknuo sam događaj prije deunloada JavaScripta. Ali oni koji su se s tim ranije pozabavili znaju da je to moguće jer su bili pogođeni upozorenjima o nesačuvanim podacima na drugim stranicama, za koje je tipičan slučaj upotrebe prije uklanjanja. Također sam koleginici za dobru mjeru istakao događaje stranice Sakrij i visibilityChange. Kako sam znao za to? Zato što se pojavio u drugom projektu, a ne zato što sam ga proučavao kada sam u početku učio JavaScript. Činjenica je da moderni front-end okviri stoje na ramenima tehnoloških divova koji su im prethodili. Oni apstrahuju razvojne prakse, često za bolje iskustvo programera koji smanjuju, ili čak eliminišu, potrebu da se zna ili dodirne ono što su tradicionalno bili osnovni koncepti front-enda koje bi svi verovatno trebali znati. Razmotrite CSS objektni model (CSSOM). Možete očekivati ​​da svako ko radi u CSS-u i JavaScript-u ima gomilu praktičnog iskustva sa CSSOM-om, ali to neće uvijek biti slučaj. Postojao je React projekat za sajt za e-trgovinu na kojem sam radio gde smo morali da učitamo stilove za trenutno izabranog dobavljača plaćanja. Problem je bio u tome što se tabela stilova učitavala na svakoj stranici kada je zaista bila potrebna samo na određenoj stranici. Programer koji je imao zadatak da ovo ostvari nikada nije dinamički učitao tablicu stilova. Opet, ovo je potpuno razumljivo kada React apstrahuje tradicionalni pristup za kojim ste možda posegnuli. CSSOM vjerovatno nije nešto što vam treba u svakodnevnom radu. Ali je vjerovatno da ćete morati da komunicirate s njim u nekom trenutku, čak i u jednom slučaju. Ova iskustva su me inspirisala da napišem ovaj članak. Postoje mnoge postojeće web funkcije i tehnologije u divljini koje možda nikada nećete dodirnuti direktno u svom svakodnevnom radu. Možda ste prilično novi u web razvoju i jednostavno ih niste svjesni jer ste uronjeni u apstrakciju specifičnog okvira koji ne zahtijeva da ga poznajete duboko, ili čak uopće. Govorim konkretno o XML-u, za koji mnogi od nas znaju da je drevni jezik koji nije potpuno sličan HTML-u. Pominjem ovo zbog nedavnih WHATWG diskusija koje sugeriraju da bi značajan dio XML steka poznatog kao XSLT programiranje trebao biti uklonjen iz pretraživača. Ovo je upravo ona vrsta starije, postojeće tehnologije koju imamo godinama i koja bi se mogla koristiti za nešto tako praktično kao što je CSSOM situacija u kojoj se nalazio moj tim. Da li ste ranije radili sa XSLT-om? Hajde da vidimo hoćemo li se u velikoj mjeri oslanjati na ovu stariju tehnologiju i iskoristiti njene karakteristike izvan konteksta XML-a kako bismo se pozabavili problemima iz stvarnog svijeta danas. XPath: Centralni API Najvažnija XML tehnologija koja je možda najkorisnija izvan direktne XML perspektive je XPath, jezik upita koji vam omogućava da pronađete bilo koji čvor ili atribut u stablu označavanja s jednim korijenskim elementom. Imam ličnu naklonost prema XSLT-u, ali to se takođe oslanja na XPath, a lična naklonost se mora ostaviti po strani u važnosti rangiranja. Argument za uklanjanje XSLT-a ne spominje XPath, pa pretpostavljam da je i dalje dozvoljen. To je dobro jer je XPath središnji i najvažniji API u ovom skupu tehnologija, posebno kada pokušavate pronaći nešto što bi se koristilo izvan uobičajene upotrebe XML-a. Važno je jer, iako se CSS selektori mogu koristiti za pronalaženje većine elemenata na vašoj stranici, oni ih ne mogu pronaći sve. Nadalje, CSS selektori se ne mogu koristiti za pronalaženje elementa na osnovu njegove trenutne pozicije u DOM-u. XPath može. Neki od vas koji ovo čitaju možda znaju XPath, a neki ne. XPath je prilično veliko područje tehnologije i ne mogu stvarno naučiti sve osnove, a također vam pokazati dobre stvari koje možete učiniti s njim u jednom ovakvom članku. Zapravo sam pokušao napisati taj članak, ali prosječna publikacija Smashing Magazina ne prelazi 5000 riječi. Već sam bio na više od2.000 riječi dok je samo na pola puta kroz osnove. Dakle, počet ću raditi cool stvari sa XPath-om i dati vam neke veze koje možete koristiti za osnove ako smatrate da su ove stvari zanimljive. Kombinacija XPath & CSS XPath može učiniti mnogo stvari koje CSS selektori ne mogu kada postavljaju upite elementima. Ali CSS selektori također mogu učiniti nekoliko stvari koje XPath ne može, naime, upiti elemente po imenu klase.

CSS XPath .myClass /*[sadrži(@class, "myClass")]

U ovom primjeru, CSS postavlja upite za elemente koji sadrže ime klase .myClass. U međuvremenu, XPath primjer ispituje elemente koji sadrže klasu atributa sa stringom “myClass”. Drugim riječima, odabire elemente sa myClass u bilo kojem atributu, uključujući elemente sa imenom klase .myClass — kao i elemente sa „myClass“ u nizu, kao što je .myClass2. XPath je širi u tom smislu. Dakle, ne. Ne sugeriram da bismo trebali izbaciti CSS i početi birati sve elemente putem XPath-a. Nije to poenta. Poenta je u tome da XPath može raditi stvari koje CSS ne može i još uvijek bi mogao biti vrlo koristan, iako je to starija tehnologija u steku pretraživača i možda na prvi pogled ne izgleda očigledno. Koristimo dvije tehnologije zajedno ne samo zato što možemo, već zato što ćemo naučiti nešto o XPath-u u procesu, čineći ga još jednim alatom u vašem stogu – za koji možda niste znali da postoji cijelo vrijeme! Problem je u tome što JavaScriptova metoda document.evaluate i različite metode selektora upita koje koristimo sa CSS API-jima za JavaScript nisu kompatibilni. Napravio sam kompatibilan API za upite da bismo započeli, iako moram priznati da nisam puno razmišljao o tome jer je to odstupanje od onoga što radimo ovdje. Evo prilično jednostavnog radnog primjera konstruktora upita za višekratnu upotrebu: Pogledajte Pen queryXPath [forked] od Bryana Rasmussena. Dodao sam dvije metode na objekt dokumenta: queryCSSSelectors (koji je u suštini querySelectorAll) i queryXPaths. Oba ova vraćaju objekt queryResults:

{ queryType: čvorovi | string | broj | boolean, rezultati: bilo koji[] // html elementi, xml elementi, stringovi, brojevi, booleovi, queryCSSSelectors: (upit: string, izmijeniti: boolean) => queryResults, queryXpaths: (upit: string, izmjena: boolean) => queryResults }

Funkcije queryCSSSelectors i queryXpaths pokreću upit koji im date nad elementima u nizu rezultata, sve dok je niz rezultata tipa čvorova, naravno. U suprotnom će vratiti queryResult sa praznim nizom i vrstom čvorova. Ako je svojstvo izmjene postavljeno na true, funkcije će promijeniti vlastite queryResults. Ovo se ni pod kojim okolnostima ne smije koristiti u proizvodnom okruženju. Radim to na ovaj način čisto da demonstriram različite efekte korištenja dva API-ja za upite zajedno. Primjeri upita Želim pokazati nekoliko primjera različitih XPath upita koji pokazuju neke od moćnih stvari koje mogu učiniti i kako se mogu koristiti umjesto drugih pristupa. Prvi primjer je //li/text(). Ovo ispituje sve li elemente i vraća njihove tekstualne čvorove. Dakle, ako bismo tražili sljedeći HTML:

  • jedan
  • dva
  • tri

…ovo je ono što se vraća:

{"queryType":"xpathEvaluate","results":["jedan","dva","tri"],"resultType":"string"}

Drugim riječima, dobijamo sljedeći niz: ["jedan","dva","tri"]. Obično biste tražili li elemente da biste to dobili, pretvorili rezultat tog upita u niz, mapirali niz i vratili tekstualni čvor svakog elementa. Ali to možemo učiniti sažetije sa XPath-om: document.queryXPaths("//li/text()").rezultati.

Primijetite da je način da dobijete tekstualni čvor korištenje text(), koji izgleda kao potpis funkcije — i jeste. Vraća tekstualni čvor elementa. U našem primjeru, postoje tri elementa li u markupu, od kojih svaki sadrži tekst ("jedan", "dva" i "tri"). Pogledajmo još jedan primjer teksta() upita. Pretpostavimo da je ovo naša oznaka: Prijava

Napišimo upit koji vraća vrijednost atributa href: document.queryXPaths("//a[text() = 'Prijava']/@href").rezultati.

Ovo je XPath upit za trenutni dokument, baš kao i prošli primjer, ali ovaj put vraćamo href atribut veze (elementa) koji sadrži tekst “Prijava”. Stvarno vraćenorezultat je ["/login.html"]. Pregled XPath funkcija Postoji veliki broj XPath funkcija i vjerovatno niste upoznati s njima. Postoji nekoliko, mislim, o kojima vrijedi znati, uključujući sljedeće:

starts-withAko tekst počinje određenim drugim primjerom teksta, starts-with(@href, 'http:') vraća true ako atribut href počinje sa http:. containsAko tekst sadrži određeni drugi primjer teksta, contains(text(), "Smashing Magazine") vraća true ako tekstualni čvor sadrži riječi "Smashing Magazine" bilo gdje u sebi. countVraća broj koliko podudaranja ima upit. Na primjer, count(//*[starts-with(@href, 'http:']) vraća broj koliko veza u čvoru konteksta ima elemenata s atributom href koji sadrži tekst koji počinje s http:. substring Radi kao JavaScript podniz, osim što prosledite string kao argument. Na primjer, substring("moj tekst", 2, 4) vraća "y t". substring-beforeVraća dio niza prije drugog niza. Na primjer, substing-before("moj tekst", " ") vraća "moj". Slično, substring-before("hi","bye") vraća prazan string. substring-afterVraća dio niza nakon drugog niza. Na primjer, substing-after("moj tekst", " ") vraća "tekst". Slično, substring-after("hi","bye") vraća prazan string. normalize-space Vraća string argumenata sa razmakom normalizovanim uklanjanjem početnog i zadnjeg razmaka i zamjenom sekvenci razmaka jednim razmakom. notVraća boolean true ako je argument lažan, u suprotnom netačan. trueVraća boolean true. falseVraća boolean false. concat Ista stvar kao i JavaScript concat, osim što ga ne pokrećete kao metodu na stringu. Umjesto toga, stavljate sve nizove koje želite spojiti. string-lengthOvo nije isto što i dužina stringa JavaScripta, već vraća dužinu stringa kojem je data kao argument. translateThis uzima string i mijenja drugi argument u treći argument. Na primjer, translate("abcdef", "abc", "XYZ") daje XYZdef.

Osim ovih konkretnih XPath funkcija, postoji niz drugih funkcija koje funkcionišu isto kao i njihove JavaScript kolege – ili pandani u osnovi bilo kojeg programskog jezika – koje bi vam vjerovatno bile korisne, kao što su pod, plafon, okruglo, zbroj itd. Sljedeća demonstracija ilustruje svaku od ovih funkcija: Pogledajte Numeričke funkcije Pen XPath [račvane] od Bryana Rasmussena. Imajte na umu da, kao i većina funkcija za manipulaciju stringovima, mnoge numeričke uzimaju jedan ulaz. Ovo je, naravno, zato što bi trebalo da se koriste za upite, kao u poslednjem XPath primeru: //li[floor(text()) > 250]/@val

Ako ih koristite, kao što to čini većina primjera, na kraju ćete ga pokrenuti na prvom čvoru koji odgovara putanji. Postoje i neke funkcije konverzije tipova koje biste vjerovatno trebali izbjegavati jer JavaScript već ima svoje probleme sa konverzijom tipova. Ali može biti trenutaka kada želite da konvertujete niz u broj da biste ga proverili sa nekim drugim brojem. Funkcije koje postavljaju tip nečega su boolean, broj, string i čvor. Ovo su važni XPath tipovi podataka. I kao što možete zamisliti, većina ovih funkcija može se koristiti na tipovima podataka koji nisu DOM čvorovi. Na primjer, substring-after uzima string kao što smo već pokrili, ali to može biti string iz atributa href. To također može biti samo niz:

const testSubstringAfter = document.queryXPaths("substring-after('hello world',' ')");

Očigledno, ovaj primjer će nam vratiti niz rezultata kao ["svijet"]. Da to pokažem na djelu, napravio sam demo stranicu koristeći funkcije protiv stvari koje nisu DOM čvorovi: Pogledajte Pen queryXPath [forked] od Bryana Rasmussena. Trebali biste primijetiti iznenađujući aspekt funkcije prevođenja, a to je da ako imate znak u drugom argumentu (tj. listu znakova koje želite prevesti) i nema odgovarajućih znakova za prevođenje, taj znak se uklanja iz izlaza. Dakle, ovo:

translate('Zdravo, moje ime je Inigo Montoya, ubio si mog oca, pripremi se da umreš','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*')

…rezultati u nizu, uključujući razmake: [" * * ** "]

To znači da se slovo “a” prevodi u zvjezdicu (*), ali svaki drugi znak koji nema prijevod s obzirom na ciljni niz je potpuno uklonjen. Razmak je sve što nam je ostaloizmeđu prevedenih znakova "a". Onda opet ovaj upit:

translate('Zdravo, moje ime je Inigo Montoya, ubio si mog oca, pripremi se za smrt','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*******************************************************')")

...nema problema i daje rezultat koji izgleda ovako:

"***** ** **** ** ***** ******* *** ****** ** ****** ******* ** ***"

Možda vam se učini da ne postoji jednostavan način u JavaScriptu da uradite upravo ono što XPath translate funkcija radi, iako za mnoge slučajeve upotrebe, replaceAll sa regularnim izrazima to može da podnese. Možete koristiti isti pristup koji sam demonstrirao, ali to je neoptimalno ako je sve što želite je da prevedete nizove. Sljedeća demonstracija obavija XPathovu funkciju prevođenja kako bi pružila JavaScript verziju: Pogledajte funkciju prevođenja olovkom [forked] od Bryana Rasmussena. Gdje biste mogli koristiti ovako nešto? Uzmimo u obzir Cezarovu šifru sa pomakom od tri mjesta (npr. vrhunsko šifriranje iz 48. p.n.e.):

translate("Cezar planira preći Rubikon!", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw")

Ulazni tekst "Cezar planira da pređe Rubikon!" rezultira “Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!” Da dam još jedan brzi primjer različitih mogućnosti, napravio sam metalnu funkciju koja uzima niz input i koristi funkciju prevođenja za vraćanje teksta, uključujući sve znakove koji uzimaju umlaute. Pogledajte funkciju Pen metal [račva] od Bryana Rasmussena.

const metal = (str) => { return translate(str, "AOUaou","ÄÖÜäöü"); }

A, ako se dobije tekst "Motley Crue vlada, rock on dudes!", vraća se "Mötley Crüe rüles, röck ön düdes!" Očigledno, neko može imati razne vrste parodijskih upotreba ove funkcije. Ako ste to vi, onda bi vam ovaj članak na TVTropesu trebao pružiti obilje inspiracije. Korištenje CSS-a sa XPath-om Zapamtite naš glavni razlog za korištenje CSS selektora zajedno sa XPath-om: CSS prilično razumije šta je klasa, dok je najbolje što možete učiniti sa XPath-om upoređivanje stringova atributa klase. To će uspjeti u većini slučajeva. Ali ako biste ikada naišli u situaciju da je, recimo, neko kreirao klase pod nazivom .primaryLinks i .primaryLinks2, a vi koristite XPath da biste dobili klasu .primaryLinks, onda biste verovatno naišli na probleme. Sve dok nema ništa slično tome, vjerovatno biste koristili XPath. Ali sa tugom mogu izvestiti da sam radio na mjestima gdje ljudi rade takve gluposti. Evo još jednog demo-a koji zajedno koristi CSS i XPath. Pokazuje šta se dešava kada koristimo kod za pokretanje XPath-a na čvoru konteksta koji nije čvor dokumenta. Pogledajte Pen css i xpath zajedno [račvane] od strane Bryana Rasmussena. CSS upit je .relatedarticles a, koji dohvaća dva elementa a u div kojem je dodijeljena klasa .relatedarticles. Nakon toga slijede tri “loša” upita, odnosno upiti koji ne rade ono što želimo da rade kada se pokreću sa ovim elementima kao kontekstnim čvorom. Mogu objasniti zašto se ponašaju drugačije nego što biste očekivali. Tri loša upita u pitanju su:

//text(): Vraća sav tekst u dokumentu. //a/text(): Vraća sav tekst unutar veza u dokumentu. ./a/text(): Ne vraća rezultate.

Razlog za ove rezultate je taj što, iako je vaš kontekst element vraćen iz CSS upita, // ide protiv cijelog dokumenta. Ovo je snaga XPath-a; CSS ne može ići od čvora do pretka, a zatim do brata ili sestre tog pretka, i otići do potomka tog brata i sestre. Ali XPath može. U međuvremenu, ./ ispituje potomke trenutnog čvora, pri čemu tačka (.) predstavlja trenutni čvor, a kosa crta (/) predstavlja odlazak do nekog podređenog čvora – bilo da se radi o atributu, elementu ili tekstu, određuje se sljedećim dijelom putanje. Ali ne postoji podređeni element odabran od strane CSS upita, tako da taj upit također ništa ne vraća. Postoje tri dobra upita u posljednjoj demonstraciji:

.//text(), ./text(), normalize-space(./text()).

Upit za normalizirani prostor demonstrira korištenje XPath funkcije, ali također popravlja problem uključen u druge upite. HTML je strukturiran ovako:

Automatizacija testiranja vaših funkcija uz Selenium WebDriver

Upit vraća liniju na početku i na kraju tekstualnog čvora,a normalize-space uklanja ovo. Korištenje bilo koje XPath funkcije koja vraća nešto drugo osim logičkog s unosom XPath primjenjuje se na druge funkcije. Sljedeći demo prikazuje nekoliko primjera: Pogledajte primjere Pen xpath funkcija [račvane] od Bryana Rasmussena. Prvi primjer pokazuje problem na koji biste trebali paziti. Konkretno, sljedeći kod:

document.queryXPaths("substring-after(//a/@href,'https://')");

… vraća jedan niz:

"www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/"

Ima smisla, zar ne? Ove funkcije ne vraćaju nizove, već pojedinačne nizove ili pojedinačne brojeve. Pokretanje funkcije bilo gdje s više rezultata vraća samo prvi rezultat. Drugi rezultat pokazuje šta zaista želimo:

document.queryCSSSelectors("a").queryXPaths("substring-after(./@href,'https://')");

Koji vraća niz od dva niza:

["www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/","www.smashingmagazine.com/2022/11/automated-test-results-improve-accessibility/"]

XPath funkcije mogu biti ugniježđene baš kao i funkcije u JavaScript-u. Dakle, ako znamo strukturu URL-a Smashing Magazine, mogli bismo učiniti sljedeće (preporučuje se korištenje šablonskih literala): `prevedi( podniz( substring-after(./@href, ‘www.smashingmagazine.com/’) ,9), '/','')`

Ovo postaje malo previše složeno do te mjere da su mu potrebni komentari koji opisuju ono što radi: uzmite sav URL iz atributa href nakon www.smashingmagazine.com/, uklonite prvih devet znakova, a zatim prevedite znak naprijed kosom crtom (/) na ništa kako biste se riješili završne kose crte naprijed. Rezultirajući niz:

["feature-testing-selenium-webdriver","automated-test-results-improve-accessibility"]

Više XPath slučajeva upotrebe XPath zaista može zablistati u testiranju. Razlog nije teško uočiti, jer se XPath može koristiti za dobijanje svakog elementa u DOM-u, sa bilo koje pozicije u DOM-u, dok CSS ne može. Ne možete računati na to da će CSS klase ostati konzistentne u mnogim modernim sistemima gradnje, ali sa XPath-om, mi smo u mogućnosti da napravimo robusnija podudaranja u pogledu sadržaja teksta elementa, bez obzira na promjenjivu DOM strukturu. Bilo je istraživanja o tehnikama koje vam omogućavaju da napravite otporne XPath testove. Ništa nije gore od toga da se testovi pokvare i propadnu samo zato što CSS selektor više ne radi jer je nešto preimenovano ili uklonjeno. XPath je također odličan u ekstrakciji višestrukih lokatora. Postoji više od jednog načina korištenja XPath upita za podudaranje elementa. Isto je i sa CSS-om. Ali XPath upiti mogu detaljnije analizirati stvari na ciljaniji način koji ograničava ono što se vraća, omogućavajući vam da pronađete određeno podudaranje gdje može postojati nekoliko mogućih podudaranja. Na primjer, možemo koristiti XPath da vratimo određeni h2 element koji se nalazi unutar diva koji odmah slijedi bratski div koji, zauzvrat, sadrži podređeni element slike s atributom data-testID="leader" na sebi:

nemojte shvatiti ovaj naslov

Ne razumite ni ovaj naslov

Zaglavlje za glavnu sliku

Ovo je upit: document.queryXPaths(` //div[ sljedeći-sestra::div[1] /img[@data-testID='leader'] ] /h2/ tekst() `);

Hajdemo u demo da vidimo kako se sve to spaja: Pogledajte Pen Complex H2 upit [račvano] od Bryana Rasmussena. Dakle, da. Postoji mnogo mogućih putanja do bilo kojeg elementa u testu koji koristi XPath. Zastarelost XSLT 1.0 Rano sam spomenuo da Chrome tim planira da ukloni podršku za XSLT 1.0 iz pretraživača. To je važno jer XSLT 1.0 koristi programiranje fokusirano na XML za transformaciju dokumenata koji se zauzvrat oslanja na XPath 1.0, koji se nalazi u većini pretraživača. Kada se to dogodi, izgubit ćemo ključnu komponentu XPath-a. Ali s obzirom na činjenicu da je XPath zaista odličan za pisanje testova, smatram da je malo vjerovatno da će XPath u cjelini uskoro nestati. Međutim, primijetio sam da se ljudi zainteresuju za funkciju kada je oduzeta. A to je svakako istina u slučaju da je XSLT 1.0 zastario. Na Hacker News-u se odvija cijela diskusija, puna argumenata protiv zabrane. Sam post je odličan primjer kreiranja okvira za blogovanje sa XSLT-om. Vimožete sami pročitati diskusiju, ali ulazi u to kako bi se JavaScript mogao koristiti kao podloga za XLST za rukovanje takvim slučajevima. Također sam vidio prijedloge da pretraživači treba da koriste SaxonJS, koji je port za JavaScript-ove Saxon XSLT, XQUERY i XPath motore. To je zanimljiva ideja, pogotovo jer Saxon-JS implementira trenutnu verziju ovih specifikacija, dok ne postoji pretraživač koji implementira bilo koju verziju XPath-a ili XSLT-a iznad 1.0, niti jedan koji implementira XQuery. Kontaktirao sam Norma Tovey-Walsha iz Saxonica, kompanije koja stoji iza SaxonJS-a i drugih verzija Saxon motora. rekao je: „Ako bi bilo koji dobavljač pretraživača bio zainteresovan da uzme SaxonJS kao polaznu tačku za integraciju modernih XML tehnologija u pretraživač, bili bismo oduševljeni da o tome razgovaramo s njima.“— Norm Tovey-Walsh

Ali i dodao: "Bio bih veoma iznenađen kada bi neko pomislio da bi uzimanje SaxonJS-a u njegovom trenutnom obliku i njegovo ubacivanje u verziju pretraživača nepromenjenog bilo idealan pristup. Prodavac pretraživača, po prirodi činjenice da izgrađuje pretraživač, može pristupiti integraciji na mnogo dubljem nivou nego što to možemo mi 'izvana'." - Norm Tovey-Walsh

Vrijedi napomenuti da su Tovey-Walshovi komentari došli otprilike tjedan dana prije najave zastarjelosti XSLT-a. Zaključak Mogao bih da nabrajam. Ali nadam se da je ovo pokazalo moć XPath-a i dalo vam mnogo primjera koji pokazuju kako ga koristiti za postizanje velikih stvari. To je savršen primjer starije tehnologije u hrpi pretraživača koja i danas ima dosta korisnosti, čak i ako nikada niste znali da postoji ili niste razmišljali o tome da je posegnete. Dalje čitanje

“Poboljšanje otpornosti automatiziranih web testova prirodnim jezikom” (ACM digitalna biblioteka) Maroun Ayli, Youssef Bakouny, Nader Jalloul i Rima Kilany Ovaj članak pruža mnoge XPath primjere za pisanje otpornih testova. XPath (MDN) Ovo je odlično mjesto za početak ako želite tehničko objašnjenje koje detaljno opisuje kako XPath funkcionira. XPath Tutorial (ZVON) Smatram da je ovaj vodič najkorisniji u mom vlastitom učenju, zahvaljujući obilju primjera i jasnih objašnjenja. XPatherOvaj interaktivni alat vam omogućava da radite direktno sa kodom.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free