Portál AbcLinuxu, 21. května 2025 02:07
Google občas takhle vypustí do divočiny nějaký ten open source software. Za jeden z nejzdařilejších považuju ajaxslt, což je kompletní (téměř -- kromě local-name()
a namespace-uri()
) implementace XPath 1.0 a XSLT 1.0 v čistém JavaScriptu. Šílenost a onanie, řeknete si. Jenže ono ve světě JavaScriptu / client-side DOMu není moc technologií, které by dokázaly nabídnout větší efektivitu při dolování informací z markupu.
Samozřejmě jsem si hned napsal funkci, nazval ji _
, podobně jako chlapci z jQuery tu svoji pro zjednodušení častého používání nazvali $
. Pak ale nastal problém s typem obsahu odesílaného dokumentu. Když byl dokument odesílán se správným content type, tedy jako application/xhtml+xml
, všechno fungovalo jako po másle. Jak by ne, XHTML je dialekt XML, prohlížeč dokument načte jako XML a jedeme dál... No, nejedeme. Pánové z Microsoftu se totiž rozhodli, že tento typ nebudou podporovat a když pošlete validní XHTML dokument jako text/html
(aby se nám chudáček explorereček nezakuckal), evaluace XPath výrazů selhává (celkem logicky -- prohlížeč v tu chvíli neví, že má v rukou validní XML).
Nadhodil jsem svůj problém v google-ajax-discuss (Perform XPath on a document sent as 'text/html'?) a když už jsem se smiřoval s tím, že na XPath můžu zapomenout, objevila se dnes ráno v listu zpráva o tom, že XPath funguje i s text/html, jen je potřeba psát názvy elementů velkými písmeny. Divné, ale je to tak. I když zas ne tak úplně, teď se pro změnu trošku cuká Opera. Chce velkými písmeny i názvy atributů, kdežto IE a Firefox zas v takovém případě odmítají spolupracovat. Ale tenhle problém se dá celkem úspěšně řešit nějakými regulárními výrazy, případně psaním trošku složitějších XPath výrazů (místo @*[name() = 'ahoj']
-- já vím, blbý příklad -- budete muset psát @*[name() = 'ahoj' or name() = 'AHOJ']
a nebo i na tenhle případ vymyslet regulární výraz, který to v případě Opery pořeší, do toho se mi už nechtělo ;)
Asi je vidět, že to není žádné super pevné řešení. Nicméně někdy umí XPath tak efektivně vytáhnout informace z DOMu, že se to IMHO vyplatí i přes takovéto překážky použít.
Nakonec bych poprosil někoho s Konquerorem, připadně dalšími méně rozšířenými prohlížeči, aby navštívili http://tester.danielkvasnicka.net/ajaxslt/ a podělili se tu s námi o výsledek. Já jsem otestoval funkčnost ve Firefoxu 2.0.0.6, Opeře 9.20, IE 6 a Safari 2.0.4
Tiskni
Sdílej:
Bug in line: if (array[i] === value || (opt_notype && array[i] == value)) {
Missing ';' at the end of statement in: // that were removed from array
Missing ';' at the end of statement in: // function applied to every element of the input array
A tak dále. Asi nemá rád komentáře nebo nevím.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.