Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

XML - morze możliwości - XPath, XPointer, XInclude

XSLT

Format XML jest dość czytelnym formatem jednak nie nadaje się on do prezentacji. Zdecydowanie lepszym pomysłem jest wyświetlić dane osadzając je ładnie np.: w HTMLu. Mamy do wyboru dwie drogi: pierwsza użycie DOM w PHP, parsując dokument i wyświetlając go wg. naszych oczekiwań. Drugim, lepszym sposobem, jest stworzenie pliku XSL oraz wykonać transformację przy użyciu XSLT.

Pliki XSL są dokumentami opisującymi sposób prezentacji i przekształceń dokumentów XML. Spróbujemy teraz pisząc kilka prostych podstawowych instrukcji, przekształcić XML naszej książki aby była ona prezentowana w formie tabeli HTML.

Jako że nasz plik jest dość prosty to w również prosty sposób zaprezentujemy go w tabeli html, przy okazji sortując.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl>
    <xsl:template match="/">
        <html>
            <head>
                <title>XML - morze możliwości</title>
                <meta http-equiv="content-type" content="text/html; charset=utf-8;" />
                <meta http-equiv="content-language" content="pl" />
            </head>
            <body>
                <h2>Książka adresowa</h2>
                <table>
                    <tr>
                        <th>Imię</th>
                        <th>Nazwisko</th>
                        <th>E-Mail</th>
                    </tr>
                    <xsl:for-each select="address-book/persons/person">
                        <xsl:sort select="lastname" />
                        <tr>
                            <td>
                                <xsl:value-of select="firstname" />
                            </td>
                            <td>
                                <xsl:value-of select="lastname" />
                            </td>
                            <td>
                                <xsl:value-of select="email" />
                            </td>
                        </tr>
                    </xsl>
                </table>
            </body>
        </html>
    </xsl>

Plik zaczynamy od przypisania prefixu dla przestrzeni nazw XSL. Następie posługujemy się elementem xsl:template który definiuje szablon. Nasz szablon zaczyna się od podstawowych elementów html. Aby przetworzyć każdą osobę posłużymy się elementem xsl:for-each, w atrybucie select zaznaczając zbiór węzłów do przetworzenia używając wyrażeń XPath. Następnie zaznaczamy że chcemy, aby osoby były posortowane alfabetycznie wg. nazwiska i umieszczamy szablon który ma być używany przy każdym elemencie który ma być przetworzony. Zawiera on html wiersza tabeli. W komórkach tabeli do wyświetlenia imienia i nazwiska osoby używamy elementu xsl:value-of który zwraca wartość węzła podanego w atrybucie select. Trzeba zwrócić uwagę na to że podajemy tam wyrażenie XPath węzła który jest dostarczany przez xsl:for-each. W naszym przypadku będzie to np.:

<firstname>Jan</firstname>
<lastname>Kowalski</lastname>
<email>jan-kowalski@gmail.com</email>
<phone>000 123 456</phone>
<city>Warszawa</city>

Dlatego też atrybut select będzie zawierał wyrażenie firstname/ a nie jak niektóry mogli mylnie sądzić address-book/persons/person/firstname. Na końcu dodajmy w pliku naszej książki linijkę podpinającą plik XSL:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="address-book.xsl" ?>
<address-book xmlns:xi="http://www.w3.org/2001/XInclude">
    <persons>
        [...]
    </persons>
</address>

Gdy otworzymy teraz plik XML naszej książki w przeglądarce naszym oczom ukaże się tabelka z osobami a nie drzewo z XML'em.

W tym przypadku procesorem XSLT był silnik przeglądarki. Jednak możemy zrobić to samo używając PHP i DOM?a.

<?php

$dom = new DomDocument();

$dom->load("address-book.xml");

$xsl = new DomDocument();

$xsl->load("address-book.xsl");

$xslt = new XsltProcessor();

$xslt->importStyleSheet($xsl);

echo $xslt->transformToXML($dom);

Zaczynamy od stworzenia dwóch obiektów DOM. Pierwszy ładuje plik adress-book.xml czyli naszą książkę, natomiast drugi address-book.xsl zawierający arkusz z przekształceniami. Następnie tworzymy obiekt XsltProcessor który najpierw importuje plik XSL następnie wykonuje transformacje do HTML na naszej książce.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (2)
Opinia
Poniedziałek 05 Styczeń 2009 1:24:49 pm - Cypherq <cypherq_at_gmail.com>

1."<adress -book> <presons>" - chyba <persons>
2. (??) zamiast (''), bardzo ułatwia to czytanie kodu.
3. <adress -book> - <adress-book>
4. < ?xml - <?xml
5. < ?php$dom - <?php $dom ?

Jak również mnóstwo innych pomniejszych literówek. Artykuł wygląda na poprawiany na kolanie. Sprawdzał ktoś w ogóle przed publikacją to to? Merytorycznie może ciekawy, ale dbajcie tez o komfort czytelnika...

Gratulacje
Niedziela 04 Styczeń 2009 11:06:56 am - phpion

Świetny artykuł! Ciekawy i przystępnie napisany. Gratulacje dla autora!

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System