XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari)



Podobné dokumenty
XSLT a jmenné prostory

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

Ajax - úvod. Klíčové pojmy: Ajax, skriptování na straně klienta a serveru, objekt XMLHttpRequest, DOM model.

Z n a č k o v a c í j a z y k y. XSL (extensible Stylesheet Language) XSLT (extensible Stylesheet Language Transformation) XPath

Základy HTML, URL, HTTP, druhy skriptování, formuláře

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

Dotazování nad XML daty a jazyk XPath

XML a XSLT. Kapitola seznamuje s šablonami XSLT a jejich použití při transformaci z XML do HTML

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Vytváříme aplikace využívající Ajax

AJAX. Dynamické změny obsahu stránek

Prezentace XML. XML popisuje strukturu dat, neřeší vzhled definice vzhledu:

APLIKACE XML PRO INTERNET

Pravidla dokumentace

KAPITOLA 6. XML, XPath a XSLT. Podpora XML v prohlížečích. XML DOM v IE

DUM č. 11 v sadě. 36. Inf-12 Počítačové sítě

Nastavení klientských stanic pro webové aplikace PilsCom s.r.o.

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

HTML - Úvod. Zpracoval: Petr Lasák

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

1 Webový server, instalace PHP a MySQL 13

1. Webový server, instalace PHP a MySQL 13

Nastavení klientských stanic pro webové aplikace PilsCom s.r.o.

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Instalace a konfigurace web serveru. WA1 Martin Klíma

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Programování v jazyce JavaScript

Název Live prez Sear enta Maps

Tvorba internetových aplikací pomocí Rich Internet Application AJAX

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

Mapy.cz vs. amapy.cz

Uživatelská příručka pro práci s Portálem VZP. Test kompatibility nastavení prohlížeče

Vývoj Internetových Aplikací

Úvod do XSLT 2.0. Jirka Kosek Copyright Jiří Kosek

Pro využití aktivního odkazu (modrý a podtržený) použijte klávesu Ctrl + kliknutí myší.

Excel a externí data KAPITOLA 2

Webové Aplikace (6. přednáška)

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

PHP a Large Objecty v PostgreSQL

KIV/PIA 2012 Ing. Jan Tichava

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Maturitní projekt do IVT Pavel Doleček

DATAMINING SEWEBAR CMS

Obsah přednášky. XML DOM SAX XPath XSL transformace 1/46

jquery - úvod Zdroj: Jiří Zralý:

Nástroj WebMaker TXV první vydání Únor 2009 změny vyhrazeny

MBI - technologická realizace modelu

Dotazování nad stromem abstraktní syntaxe

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Technická specifikace

Část 1 Moderní JavaScript

Identifikátor materiálu: ICT-3-55

Ukazka knihy z internetoveho knihkupectvi

3. HODINA. Prohlížeče Druhy prohlížečů Přehled funkcí Bc. Tomáš Otruba, Informatika 7. třída 1

Základní pojmy spojené s webovým publikováním ~ malý slovníček pojmů~ C3231 Základy WWW publikování Radka Svobodová, Stanislav Geidl

Moderní programování v JavaScriptu

Objednávkový systém Beskyd Fryčovice a.s. objednavky.beskyd.cz. OBJEDNÁVKOVÝ SYSTÉM BESKYD FRYČOVICE a.s.

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Internet - internetové prohlížeče

Část 1. Úvod. 1.1 Technické pozadí HTML a web HTML a XHTML Myšlenka CSS Další technologie 48

INFORMAČNÍ SYSTÉMY NA WEBU

DocBook a jeho využití Tomáš Pitner, Jan Pavlovič, FI MU

Testovací protokol. webový generátor I.CA. Windows XP Windows Vista Windows 7 Internet Explorer Mozilla Firefox Google Chrome Apple Safari Opera

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

NSWI096 - INTERNET JavaScript

Statistika pro light4sport.cz ( )

VY_32_INOVACE_INF3_18. Textové formáty PDF, TXT, RTF, HTML, ODT

Statistika pro ( )

Vysoká škola ekonomická v Praze

Tvorba webu. Úvod a základní principy. Martin Urza

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

AUTOMATICKÉ ŘÍZENÍ S INTERNETOVOU KOMUNIKACÍ V PHP Automatic Control with Internet Communication in PHP

Systém elektronického rádce v životních situacích portálu

1 z :21

Uživatelská dokumentace

Aja j x a x v v P H P P

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Tvorba webových stránek

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

1 z :17

Novinky ve Visual Studio Tomáš Kroupa

Internet 1 vývoj, html, css

Ukazka knihy z internetoveho knihkupectvi

Programování v jazyce JavaScript

IPv6 na serveru Co by měl administrátor znát... Stanislav Petr

XSL. Jirka Kosek. Poslední modifikace: $Date: 2005/12/01 09:35:37 $ Copyright Jiří Kosek. XML teorie a praxe značkovacích jazyků (IZI238)

Obsah. Kapitola 2 Nakupujeme na Amazonu XML-RPC... 19

DATA ARTICLE. AiP Beroun s.r.o.

Postup se dle prohlížeče a operačního systému liší, vyberte prosím jaký prohlížeč a na jakém operačním systému používáte.

HTTPS na virtuálních web serverech

KAPITOLA 2 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ

Programování v jazyce JavaScript

Content Security Policy

Manuál pro implementaci aplikace Na poštu

Transkript:

XSLT a JavaScript Autor: Petr Dvořák (http://joshis.iprofil.cz/) Úvod Dokumenty XML (můžeme rovnou říct, že narozdíl od dokumentů (X)HTML) nenesou žádnou informaci, která by prohlížeči sdělila, jakým způsobem se má ten či onen element zobrazit, jakou má mít text v daném elementu barvu, jaké má být použito písmo, či třeba jaká má být barva pozadí. Proto je do většiny moderních prohlížečů integrován takzvaný XSLT Processor. Ten zpracovává daný XML dokument spolu s tzv. XML Stylesheetem (XSL) a transformuje tak daný XML dokument např. do XHTML (nebo i do libovolného jiného XML dokumentu), čímž pomáhá prohlížeči konkretizovat vzhled jednotlivých částí XML dokumentu. Popis jazyka pro XSLT (XSLT je natolik silné, že je možno hovořit dokonce o programovacím jazyku) je mimo rámec tohoto textu. U čtenáře se v tomto směru předpokládá jistá základní erudice. Zmíníme jen, že XSLT je rovněž založeno na XML. Článek si klade za úkol vysvětlit mírně pokročilým tvůrcům webových aplikací, jak XSLT používat v prohlížečích právě pomocí JavaScriptu. V následujícím textu si ukážeme kusy zdrojových kódů, na kterých je možno XSLT transformaci otestovat. Potřebujeme tedy: XML soubor, který bude transformován XML Stylesheet kterým budeme transformovat JavaScript funkce XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari) Prohlížeče z rodiny Mozilla používají (od verze 1.2) pro XML Transformace engine TransforMiiX. Pro používání XSLT v Mozille je nejprve nutné vytvořit objekt XSLTProcessor. Následně je nutno importovat do tohoto objektu stylesheet voláním funkce importstylesheet(node). Parametr Node určuje uzel XML dokumentu, který obsahuje popis XML transformací. Ten je samozřejmě možno získat více způsoby - můžeme například XSLT dokument "sestavit na místě", načíst jej pomocí metody document.load("xmldoc.xml") nebo je i možné využít AJAX a dotázat se na responsexml (např. chceme-li dělat XML Transformace "za běhu", to znamená nejen po načtení stránky). My si zde ukážeme poslední jmenovaný postup, protože je pravděpodobně nejvíce obecný a je zároveň nejčastěji uváděn v jiných tutoriálech. Pro provedení transformace samotné máme k dispozici dvě metody objektu typu XSLTProcessor. Metoda XSLTProcessor::transformToDocument(xmlfile_xml) přijímá jeden argument a tím je XML dokument, který chceme transformovat pomocí importovaného XML stylesheetu a jako výsledek vrací celý DOM dokument. Metoda XSLTProcessor::transformToFragment(xmlfile_xml, ownerobj) vrací "pouze" DOM DocumentFragment Node, který se může následně připojit k jinému dokument objektu. Proto tato metoda přijímá ještě druhý parametr, který tento objekt specifikuje (každý fragment musí patřit dokumentu). Metoda transformtofragment je tedy o něco obecnější a je proto v mnoha případech vhodnější. Samozřejmě si musíme také načíst XML dokument, který chceme transformovat. Celý níže uvedený kód zavoláme například při načtení elementu body, tedy <body onload="transform()">.

Nezapomínejme, že tento kód nefunguje v prohlížeči Internet Explorer! function Transform(xsltFile, xmlfile, wheretowrite) { // not for IE!!! // Vytvorime objekt XSLTProcessor var xsltproc = new XSLTProcessor(); // Vytvorime objekt pro HTTP zadosti var xmlhttp = new XMLHttpRequest(); // Ziskame XML dokument s popisem transformaci xmlhttp.open("get", xsltfile, false); xmlhttp.send(null); var xslstylesheet = xmlhttp.responsexml; // Importujeme stylesheet xsltproc.importstylesheet(xslstylesheet); // Nacteme XML soubor ktery chceme transformovat xmlhttp.open("get", xmlfile, false); xmlhttp.send(null); var xmldoc = xmlhttp.responsexml; // Provedene transformaci XML dokumentu // Tento kod je ekvivalentni volani transformtodocument var fragment = xsltproc.transformtofragment(xmldoc, document); // Zapiseme do elementu s id=wheretowrite document.getelementbyid(wheretowrite).appendchild(fragment); Více informací lze najít na stránkách Mozilly na stránce: Using the Mozilla JavaScript interface to XSL Transformations http://developer.mozilla.org/en/docs/using_the_mozilla_javascript_interface_to_xsl_transformations XSLT v MS Internet Exploreru 7 Přístup k XML Transformacím je v MS Internet Exploreru oproti Mozille poněkud odlišný - XSLT je součástí MSXML (Microsoft XML Core Services). Nejjednodušší způsob (uvedený na MSDN), jak používat XSLT v prohlížeči IE je upravit funkci Transform do níže uvedené podoby (ostatní soubory můžeme nechat tak jak jsou). Využíváme zde ActiveX objekty pro vytvoření XML HTTP requestů. Důležitá je zde především metoda transformnode(xslt), která transformuje XML uložené v srctree pomocí stylesheetu načteného v xslttree. Toto řešení funguje pouze v Internet Exploreru (testováno bylo ve verzi 7). function Transform(xsltFile, xmlfile, wheretowrite) { // just for IE!!! // vytvorime XMLHTTP Request pro XML var srctreexmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); srctreexmlhttp.open("get", xmlfile, false); srctreexmlhttp.send(null); // Ulozime zdrojove XML srctree = srctreexmlhttp.responsexml; // Vytvorime XMLHTTP Request pro XSLT var xslttreexmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xslttreexmlhttp.open("get", xsltfile, false); xslttreexmlhttp.send(null);

// Ulozime transformace (XSLT) xslttree = xslttreexmlhttp.responsexml; // Zapiseme transformovany XML kod document.getelementbyid(wheretowrite).innerhtml = srctree.transformnode(xslttree); Více informací lze najít na stránkách Microsoftu na stránce: XSLT for MSXML http://msdn.microsoft.com/en-us/library/ms759204.aspx Implementace fungující jak v IE tak v Mozille a Opeře Asi je přirozené, že řešení které funguje pouze v jednom ze dvou majoritních prohlížečů není příliš zajímavé. Proto se pokusím napsat řešení, které funguje v obou prohlížečích. De facto si rozdělíme celý kód na dva případy dle prohlížečů. Takto provedeme transofrmaci nezávisle na prohlížeči. Ve skriptu nejprve získáme XML dokument, který budeme chtít transformovat, poté soubor s XSLT a nakonec provedeme transformaci samotnou. function Transform(xsltFile, xmlfile, wheretowrite) { var xmlhttp; var xslthttp; if (window.xmlhttprequest) { // Mozilla + Opera + Safari xmlhttp = new XMLHttpRequest(); xslthttp = new XMLHttpRequest(); else if (window.activexobject) { try { // MSIE 6+ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xslthttp = new ActiveXObject("Msxml2.XMLHTTP"); catch (e) { try { // MSIE 5.5+ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xslthttp = new ActiveXObject("Microsoft.XMLHTTP"); catch (e) { return false; else return false; xmlhttp.open("get", xmlfile, false); xmlhttp.send(null); var XML = xmlhttp.responsexml; xslthttp.open("get", xsltfile, false); xslthttp.send(null); var XSLT = xslthttp.responsexml; var xsltproc; if (typeof XSLTProcessor!= "undefined") { xsltproc = new XSLTProcessor(); xsltproc.importstylesheet(xslt); var fragment = xsltproc.transformtofragment(xml, document); document.getelementbyid(wheretowrite).appendchild(fragment); else { document.getelementbyid(wheretowrite).innerhtml = XML.transformNode(XSLT);

Tento kód byl otestován a funkční v MS IE 7, Mozilla Firefox 2, Opera 9, Safari 3 for Windows. Nefunguje v prohlížeči Konqueror (Linux). Využití: Zobrazování cizích RSS kanálů na svých stránkách Výše uvedený kód je možno upravit tak, aby (za předpokladu správného nastavení serveru) posloužil ke zobrazování cizích RSS kanálů na stránkách. Je však nutno přenést část úkolů spojených se získáváním RSS kanálu na server-side skriptování, například v PHP. Není totiž možné (z bezpečnostních důvodů) volat metodu XMLHTTPRequest::open (ale ani třeba document::load) do jiné než vlastní domény. Zde si ukážeme pouze nejjednodušší možný skript (rss.php), průměrně zdatný PHP kodér si skript odpovídajícím způsobem upraví. // Soubor: rss.php // Posilani obsahu RSS kanalu jako XML header("content-type: Text/xml"); $rss = "http://www.zive.cz/default.aspx?server=1&section=47&rss=1"; echo file_get_contents($rss); Tento skript dělá následující: na serveru se pomocí funkce file_get_contents stáhne obsah RSS kanálu a ten se pomocí funkce header odešle jako Mime-type Text/XML (je samozrejmě možné specifikovat i kódování znaků). Máme tedy skript uložený na našem serveru, který posílá RSS obsah, získaný pomocí server-side skriptování z jiné domény. Nyní je tedy možno použít upravenou metodu UniversalTransform() (XMLHTTPRequest::open už projde, skript rss.php, který posílá obsah RSS kanálu ve formě XML, je u nás na doméně) - stačí jako soubor xmlfile zadat "rss.php". Samozřejmě je nutné použít vhodný XSLT stylesheet, jendoduchý si můžete zkopírovat níže...

<?xml version="1.0" encoding="iso-8859-2"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" omit-xml-declaration="no" indent="yes" encoding="utf-8" media-type="text/xml; charset=utf-8" /> <xsl:template match="rss/channel"> <html> <head> <title> <xsl:value-of select="title"/> - <xsl:value-of select="lastbuilddate"/> </title> </head> <body> <div id="obsah"> <h1 class="rss_channel"> <a> <xsl:attribute name="href"> <xsl:value-of select="link"/> <xsl:attribute name="onclick"> <xsl:text> return!window.open(this.href); </xsl:text> <xsl:value-of select="title"/> </a> </h1> <p> <xsl:value-of select="description" disable-output-escaping="yes"/> </p> <hr /> <xsl:for-each select="//item"> <span class="rss_topic"> <xsl:attribute name="title"> <xsl:value-of select="pubdate"/> <a> <xsl:attribute name="href"> <xsl:value-of select="link"/> <xsl:attribute name="onclick"> <xsl:text> return!window.open(this.href); </xsl:text> <xsl:value-of select="title"/> </a> </span> <p class="rss_description"> <xsl:value-of select="description" disable-output-escaping="yes"/> </p> </xsl:for-each> </div> </body> </html> </xsl:template> </xsl:stylesheet>