Portál AbcLinuxu, 4. června 2024 10:20

Ajaxslt, XPath a content type text/html

19.10.2007 09:57 | Přečteno: 1398×

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

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

stativ avatar 19.10.2007 10:47 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
Odpovědět | Sbalit | Link | Blokovat | Admin
V konqueroru 3.5.8 to funguje
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
Daniel Kvasnička ml. avatar 19.10.2007 10:50 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
Dobra zprava. Dik.
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
19.10.2007 13:06 mlz
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
Kq 3.5.7 funguje

http://tester.danielkvasnicka.net/ajaxslt/

Okno:

-----------------------------------

XPath ve vasem prohlizeci funguje!

OK

------------------------------------
19.10.2007 16:35 Radek | skóre: 12
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
Odpovědět | Sbalit | Link | Blokovat | Admin
Konqueror 3.5.7 - OK

Epiphany 2.14.3 - OK

Opera 9.24(Build 671) - OK
21.10.2007 22:02 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše IE a XML
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud chcete pokoušet XML v IE, posílejte mu soubory bez XML prologu (pokud si vystačíte s XML 1.0). Matně si vzpomínám, že to stačilo (možná bylo ještě třeba přejít na obecnější MIME typ text/xml).

Jinak ohledně velikosti písmen tagů je třeba pamatovat, že XML je na velikost písmen citlivé, HTML má pro parsovaná jména citlivost v DTD vypnutou.
22.10.2007 07:25 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
Odpovědět | Sbalit | Link | Blokovat | Admin
www-client/links-2.1_pre28-r1 (gentoo)

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.
Only Sith deals in absolutes.
22.10.2007 11:53 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Ajaxslt, XPath a content type text/html
předverze 29 a vyšší už nepodporí JS, protože jeho interpret je plný chyb a nikdo mu nerozumí.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.