Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

XSLT – jazyk budoucnosti

Protože je dnes stále více dat dostupných v XML, vznikla potřeba jazyka, který umožní jednoduše popsat způsob převodu mezi různými formáty založenými na XML. Právě XSLT je jazyk, který umí jednoduše popsat, jak se má dokument XML převést na dokument XML s jinou strukturou, případně do podoby stránky HTML nebo dokonce do čistého textu.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

XSLT lze použít i pro naší úlohu, protože potřebujeme převést RSS (což je jen specifický případ dokumentu XML) do formátu HTML.

Příklad 7. XSLT styl pro převod RSS do HTML – rss2html.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="html" encoding="utf-8"
            doctype-public="-//W3C//DTD HTML 4.01//EN"/>

<xsl:template match="channel">
  <html lang="cs">
    <head>
      <title>Přehled zpráv</title>
    </head>
    <body>
      <h1>Přehled aktuálních zpráv ze serveru
          <a href="{link}"><xsl:value-of select="title"/></a></h1>

      <dl>
        <xsl:for-each select="item">
          <dt><a href="{link}"><xsl:value-of select="title"/></a></dt>
          <dd><xsl:value-of select="description"/></dd>
        </xsl:for-each>
      </dl>

    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

XSLT pro svůj zápis používá syntaxi XML, proto musí začínat deklarací XML. Výkonné instrukce XSLT patří do jmenného prostoru http://www.w3.org/1999/XSL/Transform, pro který se obvykle používá prefix xsl. Celý styl se zapisuje dovnitř elementu xsl:stylesheet. Uvnitř stylu lze používat další instrukce. My například pomocí instrukce xsl:output nastavujeme parametry výstupu – v jakém bude kódování, jaký se použije formát (HTML/XML) a jak bude vypadat deklarace typu dokumentu:

<xsl:output method="html" encoding="utf-8"
            doctype-public="-//W3C//DTD HTML 4.01//EN"/>

Nejdůležitější částí každého stylu jsou šablony ( xsl:template). Každá šablona definuje, jak se bude zpracovávat určitá část vstupního dokumentu (nejčastěji nějaký konkrétní element). Náš styl obsahuje jen jednu šablonu, která definuje způsob zpracování elementu  channel:

<xsl:template match="channel">
  …
</xsl:template>

Šablona se pak chová tak, že v ní obsažené texty a elementy nepatřící do jmenného prostoru XSLT kopíruje na svůj výstup. Elementy patřící do jmenného prostoru XSLT jsou chápány jako instrukce, které XSLT procesor provádí. V naší šabloně jsou použity jen dvě instrukce xsl:value-ofxsl:for-each.

Instrukce xsl:value-of slouží k vypsání výsledku XPath výrazu do výstupu. Takže například instrukce:

<xsl:value-of select="title"/>

vypíše obsah elementu title, který je dítětem aktuálního uzlu. No a uvnitř šablony je aktuální ten uzel, který šablona právě obsluhuje, tedy element  channel.

Instrukce xsl:for-each je naopak příkaz cyklu. Pro všechny uzly, které vybere XPath výraz uvedený v atributu select, se provede kód uvedený uvnitř této instrukce. Uvnitř cyklu se navíc aktuálním uzlem stává uzel, pro který se právě provádí tělo cyklu, takže XPath výraz title nyní vybírá název položky, ne kanálu v RSS dokumentu.

Potřebujeme-li nějakou hodnotu vložit do atributu, nemůžeme použít instrukci xsl:value-of, protože syntaxe XML neumožňuje používat elementy uvnitř hodnot atributů a XSLT musí této syntaxi vyhovět. Uvnitř atributů proto můžeme výrazy jazyka XPath zapisovat do složených závorek ( {…}).

Aby bylo naše řešení kompletní, musíme samozřejmě umět na dokument XML aplikovat transformaci popsanou pomocí XSLT a její výsledek poslat do prohlížeče. V PHP je tento úkol velmi jednoduchý, protože obsahuje i knihovnu pro práci s XSLT. Stačí dokument i styl načíst jako DOM objekty do paměti, poté si vytvořit nový procesor XSLT (třída XSLTProcessor), načíst do něj styl z DOM stromu a spustit transformaci.

Příklad 8. Transformace dokumentu XML – xslt.php

<?php

// načtení dokumentu XML
$xml = new DomDocument();
$xml->load("../data/luparss.xml");

// načtení stylu XSLT
$xsl = new DomDocument();
$xsl->load("rss2html.xsl");

// vytvoření procesoru XSLT
$proc = new xsltprocessor();
$proc->importStylesheet($xsl);

// provedení transformace a vypsání výsledku
echo $proc->transformToXML($xml);
?>

Závěr

Viděli jsme, že PHP nabízí několik různých metod pro čtení dokumentů XML. Pro zpracování rozsáhlých dokumentů (větších než jednotky megabajtů) jsou vhodná jen rozhraní SAX a XMLReader. Tato rozhraní jsou navíc velmi rychlá.

Můžeme-li si dovolit načíst celý dokument XML do paměti, máme na výběr mezi rozhraními SimpleXML a DOM. Pro dokumenty s jednoduchou strukturou je použití SimpleXML většinou jednodušší než použití DOMu. Nicméně DOM rozhraní na rozdíl od SimpleXML umožňuje přístup ke všem informacím uloženým v dokumentu XML. Navíc rozhraní DOM umožňuje dokument XML v paměti i modifikovat.

Máme-li již však dokument načtený celý do paměti pomocí DOM, je v mnoha případech vhodnější využít nějaký nástroj vyšší úrovně, jako je XPath nebo XSLT. Přístup k datům uloženým v XML a jejich zpracování je mnohem efektivnější než při použití nízkoúrovňových metod DOM.

Více informací o knize naleznete na stránkách nadavatelství Grada a na stránkách autora.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Přehled názorů

XPath 2.0 / XSLT 2.0
Peter 9. 11. 2009 07:25
Nový
├ 
Re: XPath 2.0 / XSLT 2.0
fos4 9. 11. 2009 08:12
Nový
└ 
Re: XPath 2.0 / XSLT 2.0
Jirka Kosek 9. 11. 2009 08:49
Nový
lehce offtopis - TEI/Docbook
pepazdepa 9. 11. 2009 09:52
Nový
└ 
Re: lehce offtopis - TEI/Docbook
Jirka Kosek 9. 11. 2009 10:20
Nový
XSLT :-/
josef 9. 11. 2009 10:07
Nový
└ 
Re: XSLT :-/
Jirka Kosek 9. 11. 2009 10:26
Nový
 
└ 
Re: XSLT :-/
josef 9. 11. 2009 10:40
Nový
 
 
├ 
Re: XSLT :-/
fos4 9. 11. 2009 11:21
Nový
 
 
│
└ 
Re: XSLT :-/
Jirka Kosek 9. 11. 2009 17:24
Nový
 
 
│
 
└ 
Re: XSLT :-/
T.oo.M 13. 11. 2009 19:03
Nový
 
 
└ 
Re: XSLT :-/
Jirka Kosek 9. 11. 2009 17:22
Nový
 
 
 
└ 
Re: XSLT :-/
josef 9. 11. 2009 18:13
Nový
 
 
 
 
└ 
Re: XSLT :-/
Jirka Kosek 9. 11. 2009 19:28
Nový
 
 
 
 
 
└ 
Re: XSLT :-/
V.Novák 10. 11. 2009 10:43
Nový
 
 
 
 
 
 
├ 
Re: XSLT :-/
Jirka Kosek 10. 11. 2009 12:34
Nový
 
 
 
 
 
 
└ 
Re: XSLT :-/
Kit 10. 11. 2009 13:03
Nový
SimpleXML
Jakub Vrána 9. 11. 2009 13:17
Nový
└ 
Re: SimpleXML
Jirka Kosek 9. 11. 2009 17:34
Nový
 
└ 
Re: SimpleXML
Jakub Vrána 9. 11. 2009 17:57
Nový
 
 
└ 
Re: SimpleXML
David Grudl 9. 11. 2009 18:46
Nový
 
 
 
└ 
Re: SimpleXML
Jakub Vrána 9. 11. 2009 21:13
Nový
temna budoucnost
Pavel 9. 11. 2009 13:18
Nový
├ 
Re: temna budoucnost
Stefan 9. 11. 2009 13:22
Nový
└ 
Re: temna budoucnost
Jirka Kosek 9. 11. 2009 17:38
Nový
 
└ 
Re: temna budoucnost
Pavel 9. 11. 2009 21:28
Nový
 
 
└ 
Re: temna budoucnost
Jirka Kosek 10. 11. 2009 00:59
Nový
 
 
 
└ 
Re: temna budoucnost
Pavel 10. 11. 2009 08:34
Nový
 
 
 
 
└ 
Re: temna budoucnost
Jirka Kosek 10. 11. 2009 10:20
Nový
 
 
 
 
 
├ 
Re: temna budoucnost
Pavel 10. 11. 2009 18:52
Nový
 
 
 
 
 
└ 
Re: temna budoucnost
Pavel 11. 11. 2009 21:54
Nový
 
 
 
 
 
 
└ 
Re: temna budoucnost
Jirka Kosek 11. 11. 2009 22:31
Nový
 
 
 
 
 
 
 
└ 
Re: temna budoucnost
Pavel 12. 11. 2009 00:14
Nový
E4X (titulek musí být minimálně 4 znaky dlouhý)
Borek Bernard 9. 11. 2009 13:44
Nový
└ 
Re: E4X (titulek musí být minimálně 4 znaky dlouhý)
Jirka Kosek 9. 11. 2009 18:05
Nový
xslt je hrozna sracka
DDT 9. 11. 2009 14:17
Nový
XSLT = jazyk pro zoufalce
Trm 9. 11. 2009 19:46
Nový
└ 
Re: XSLT = jazyk pro zoufalce
Jirka Kosek 10. 11. 2009 00:17
Nový
xml moderni
xy 9. 11. 2009 22:46
Nový
Zajímavou alternativu podle mě představuje Scala
Inkvizitor 10. 11. 2009 00:44
Nový
├ 
Ten pattern matching jsem trochu přepísknul
Inkvizitor 10. 11. 2009 00:48
Nový
└ 
Re: Zajímavou alternativu podle mě představuje Scala
Jirka Kosek 10. 11. 2009 00:51
Nový
 
└ 
Re: Zajímavou alternativu podle mě představuje Scala
Inkvizitor 10. 11. 2009 01:37
Nový
moje zkušenost
pravdokop - 11. 11. 2009 00:23
Nový
└ 
Re: moje zkušenost
Jirka Kosek 11. 11. 2009 10:05
Nový
 
└ 
Re: moje zkušenost
Jan Tichý 11. 11. 2009 11:38
Nový
 
 
└ 
Re: moje zkušenost
Jirka Kosek 11. 11. 2009 12:39
Nový
 
 
 
├ 
Re: moje zkušenost
Pavel 11. 11. 2009 22:43
Nový
 
 
 
│
└ 
Re: moje zkušenost
Jirka Kosek 12. 11. 2009 09:55
Nový
 
 
 
│
 
└ 
Re: moje zkušenost
Pavel 12. 11. 2009 20:51
Nový
 
 
 
│
 
 
└ 
Re: moje zkušenost
Jirka Kosek 13. 11. 2009 15:18
Nový
 
 
 
│
 
 
 
└ 
Re: moje zkušenost
Pavel 13. 11. 2009 21:00
Nový
 
 
 
│
 
 
 
 
└ 
Re: moje zkušenost
Jirka Kosek 13. 11. 2009 21:54
Nový
 
 
 
│
 
 
 
 
 
└ 
Re: moje zkušenost
Pavel 14. 11. 2009 10:12
Nový
 
 
 
└ 
Re: moje zkušenost
Pavel 11. 11. 2009 23:12
Nový
 
 
 
 
└ 
Re: moje zkušenost
Jirka Kosek 12. 11. 2009 09:58
Nový
 
 
 
 
 
└ 
Re: moje zkušenost
Pavel 12. 11. 2009 18:21
Nový
 
 
 
 
 
 
├ 
Re: moje zkušenost
Inkvizitor 13. 11. 2009 09:48
Nový
 
 
 
 
 
 
│
└ 
Re: moje zkušenost
Pavel 13. 11. 2009 12:23
Nový
 
 
 
 
 
 
└ 
Re: moje zkušenost
Jirka Kosek 13. 11. 2009 10:55
Nový
 
 
 
 
 
 
 
└ 
Re: moje zkušenost
Pavel 13. 11. 2009 12:44
Nový
 
 
 
 
 
 
 
 
└ 
Re: moje zkušenost
abrakadabra 13. 11. 2009 17:01
Nový
 
 
 
 
 
 
 
 
 
└ 
Re: moje zkušenost
Jirka Kosek 13. 11. 2009 22:02
Nový
Hlavní problém
Jakub Vrána 11. 11. 2009 23:29
Nový
└ 
Re: Hlavní problém
Jirka Kosek 12. 11. 2009 10:00
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem