Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: XML & XSL
Forum PHP.pl > Forum > XML, AJAX > XML
spenalzo
Nabyłem książkę "XML. Leksykon kieszonkowy" wyd. Helion i chcąc zmienić troche jeden z przykładów do własnych potrzeb mam taki plik:
[xml:1:1f763170b3]
?xml version="1.0" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<dane>
<plik>
<ID>16</ID>
<nazwa_org>123.m3u</nazwa_org>
<userid>4</userid>
<czas>1069200139</czas>
<opis>Wprowadź opis pliku</opis>
<rozmiar>3340</rozmiar>
<rodzaj>0</rodzaj>
</plik>

<plik>
<ID>13</ID>
<nazwa_org>logo.jpg</nazwa_org>
<userid>4</userid>
<czas>1069199825</czas>
<opis>To jest opis</opis>
<rozmiar>26039</rozmiar>
<rodzaj>1</rodzaj>
</plik>

<plik>
<ID>12</ID>
<nazwa_org>index.php</nazwa_org>
<userid>4</userid>
<czas>1069193326</czas>
<opis>Wprowadź opis pliku</opis>
<rozmiar>44</rozmiar>
<rodzaj>1</rodzaj>
</plik>
...
...
...
</dane>[/xml:1:1f763170b3]
i mam do tego taki oto plik XSL:
[xml:1:1f763170b3]<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Format">
<xsl:template match="dane">
<table border="1" width="800" cellpadding="5" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#C0C0C0">
<tr><th width="2%" bgcolor="#CCCCCC"></th><th width="30%" bgcolor="#CCCCCC">Nazwa pliku</th>
<th bgcolor="#CCCCCC" width="15%">Wlasciciel</th><th bgcolor="#CCCCCC" width="15%">Data</th>
<th width="15%" bgcolor="#CCCCCC">Rozmiar</th><th width="25%" bgcolor="#CCCCCC">Opis</th></tr>
<xsl:for-each select="plik">
<tr>
<td align="center" bgcolor="#F5F5F5"><img src="file.gif"/></td>
<td align="left" bgcolor="#F5F5F5"><a href="index.php?c=down&amp;id=4">
<xsl:process select="nazwa_org"/>
</a></td>
<td align="center" bgcolor="#F5F5F5">user</td>
<td align="center" bgcolor="#F5F5F5">data</td>
<td align="center" bgcolor="#F5F5F5">
<xsl:process select="rozmiar "/></td>
<td align="center" bgcolor="#F5F5F5"><a href="jakislink">Pobierz</a></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>[/xml:1:1f763170b3]

Jest to zrobione w oparciu o przykład z ww książki. Ale jak można się domyślic - nie działa:
- wyświetla sie nagłowek tabeli i jeden pusty wiersz
- nie wiem czy tam powinno być xsl:process czy xsl:value-of, bo żadne nie działa
- u mnie na IE5 plik XML sie wyswietla, u innych nie...
Co jest?

I drugie pytanie: czy dopuszczalne jest umieszczanei w taki sposób HTMLa?
spenalzo
Hmm... tak troche pokombinowałęm i wyrzuciłem cały HTML z XSLa zostawaiają jakiśtam tekst, ale nadal for-each sie nie wykonuje - może to struktura pliku XML jest zła? A może to ta książką jest do d..., skoro podany tam przykład o identycznej struktucze u nich niby działa, ale u mnie nie już nie chce? :/
Dominik
Ja mam kilka uwag. Odrazu mowie ze nie szczeglowowych (poniewaz chwilowo nie mam czasu, jak troche znajde to przeanalizuje kod).
1. Jesli masz obawy co do poprawnosci plikow XML (jako well-formated i pozostalych) to poprostu a skozystaj z walidatora (zaden czlowiek tak szybko i skutecznie nie wylapie ewentualnych bledow jak automat). Np http://www.stg.brown.edu/service/xmlvalid/ lub cos innego (moze bardziej zaawansowanego) mozesz sobie zgooglowac.
2. Jesli masz obawy co do ksiazki to siegnij do oryginalu. Z tego co wiem jest to ksiazka O'Reilly wiec w Polsce nie trudno o to wydawnictwo. A wydawnictwo to jest chyba najbardziej profesjonalne ze wszystkich innych dlatego raczej jesli jakis blad wkradl sie do polskiej wersji w oryginale napewno zobaczysz (ewentualnie w erracie).
3. Od razu zaznaczam ze nie jest to reklama (lub antyreklama) jakiej kolwiek z przegladarek ale na IE 5.0 daleko nie zajedziesz. Nie ma co sie oszukiwac przegladarka ta jest bardzo stara (IE 6 jest tylko stara [czyli bez bardzo] winksmiley.jpg ) a co za tym idze nowe technologie naja sie nijak to tej przegladarki.
4. To juz tylko rada. Zalatw sobie jakis parser do XSLT (wtedu zobaczysz "kod" po transformacji - pozwoli Ci to zobaczyc co, gdzie i jak nie wyszlo). Jesli nie masz dalej nie bedizesz mial pomyslu na namiezenie bledu to zalatw sobie debbuger.
spenalzo
Ech... nadal kupa. Kolejna próba zapoznania się z XSL spełzła na niczym. sad.gif
Validatory wysypują się bo nie mam zdefiniowanego DTD i "nie znają" moich znaczników, więc znalezienie błedu raczej nioe jest proste.
wassago
~OT:
ostatnimi czasy bawilem sie XML, XSLT + php i niestety doszedlem do wniosku ze XSLT nie jest godne uwagi w takim stopniu jako parser niz php. co prawda uzywalem php do interpretowania pliku XSLT ale nie moglem dynamicznie zmieniac zawartosci w owym pliku, nawet po instalacji odpowiedniej klasy, gdy uzywalem tagow <php:eval></php:eval>, nic z tego nie wychodzilo i wywalalo mi blad.. takze php dalej zadzi jezeli mowa o interpretowaniu XML'a.. a XSLT schodzi na drugi plan. takie jest moje zdanie.
Dominik
To i ja sobie pozowle na ~OT:
Od razu pisze, ze nie jest moja intencja wywolanie wojny. I nie chcem, zeby ktos komentowal zarowno moja wypowiedz jak i wassago. Ale pozwole sobie napisac nie tyle sprosotowanie co inny punkt widzenia. Przedstawie tylko argumenty drugiej strony a niech czytelnicy sami wyciagna wnioski.
1. Uwazam, ze wassago "msci" sie torche na XSLT bo w jego wypowiedzi mozliwosci XSLT sa dyskredytowane a jak sam mapisal XSLT "bawil sie" krotko (nie mnie oceniac ale moze za krotko?). Dalej pisze, ze nic mu nie wychodzilo a to nie jest wina XSLT (zezeli by pokusic sie o skazywanie winnych czego nie jestem zwolennikiem to albo On sam jest winny albo php ale napewno nie XSLT)
2. I teraz chcem wyjasnic, ze nie jest to post skierowany przeciwko php (poniewaz innego tego rozdzaju jezyki radza sobie na tym polu jeszcze gorzej). A zupelnie odwrotnie uwazam, ze php w tej dziedzinie jest najlepsze (ale nie dosc dobre - prosze zrwocic uwage na to sformuowanie). Nie jest to juz napewno oglony atak na php bo jest to moj ulubiony (i to nie bez powodow) jezyk programowania czego dowodem jest moja obecnosc na tym forum smile.gif . A co pozwala nam na optymistyczne patrzenie na przod to to, ze php bardzo dynamicznie sie rozwija i wczesniej czy pozniej spelni sie moje (Wasze) mazenie o zadowalajacej "wspolpracy" z XSLT.
Seth
Wiem, ze mialo byc bez komentarzy, ale nie zgadzam sie w jednej kwesti i nie chcial bym aby ludzie czytajacy Twoja wypowiedz byli przekonani o jej slusznosci.

Cytat
2. I teraz chcem wyjasnic, ze nie jest to post skierowany przeciwko php (poniewaz innego tego rozdzaju jezyki radza sobie na tym polu jeszcze gorzej). A zupelnie odwrotnie uwazam, ze php w tej dziedzinie jest najlepsze (ale nie dosc dobre - prosze zrwocic uwage na to sformuowanie).


ASP.NET jest znacznie lepiej wyposazone w klasy obrabiajace XSLT niz php. Trzeba tez zastrzec, ze sa one wbudowane w system, wiec nei trzeba je osobno dolaczac.
Przykladem moze byc ten artykul: http://www.topxml.com/dotnet/articles/xslt/default.asp
Dominik
Cytat
ASP.NET jest znacznie lepiej wyposazone w klasy obrabiajace XSLT niz php. Trzeba tez zastrzec, ze sa one wbudowane w system, wiec nei trzeba je osobno dolaczac.
Przykladem moze byc ten artykul:http://www.topxml.com/dotnet/articles/xslt/default.asp

Masz racje. Pewnie pomyslisz, ze to dziwne ale zgadzam sie z Toba w 100% tylko, ze roznica miedzy php (i java) a ASP jest to ze ASP robi to niezgodnie z W3C.
Seth
ASP.NET robi to jak najbardziej zgodnei z ustaleniami W3C.
Natomiast mozna sie spierac o to jak IE je interpretuje ale to juz inny temat.
Dominik
Cytat
ASP.NET robi to jak najbardziej zgodnei z ustaleniami W3C.
Natomiast mozna sie spierac o to jak IE je interpretuje ale to juz inny temat.

Absolutnie nie chodzi mi o IE bo tutaj to szkoda klawiatury zeby o tym czyms pisac. Chodzi o to, ze cala "otoczka" XML-a nie jest ogolnie poprawnie supportowana przez ASP. Oczywiscie jesli chodzi o XSLT moze jest z tym najlepiej jednak i tu sie znajdze... Chodzi dokladnie o to, ze jesli transformacje przebiega to HTML-a (bo juz z XHTML-em jest cieniutko) jest OK ale mam wrazenie, ze rozmawiamy o XML -> XML a jesli tak to jeden lub dwa z nich musi byc jakos opisany gramatycznie dla parsera. A wlasnie tutaj zaczynaja sie schody dla ASP bo Schema w ASP != W3C Schema. Schema te sa budowane na bazie DCD a wiadomo co to oznacza... Generalnie nie chcem sie wbijac w szczegoly szczegolnie ze nie czuje sie moco w ASP. Dla mnie EOT.
Seth
Kiedys mialem stycznosc z schema z Oracla 9i i nie mialem problemu z "dopasowaniem" na jej bazie xml'a w asp.net. Wiec dlatego uwazam, ze w .NETcie trzymaja sie standardow. Poza tym web services w asp.net nie mogly by wymieniac danych miedzy klientami chociazby napsianymi w Javie gdyby standardy byly inne - a moga winksmiley.jpg
Dla mnie tez EOT.
wassago
Cytat
[..]
1. Uwazam, ze wassago "msci" sie torche na XSLT bo w jego wypowiedzi mozliwosci XSLT sa dyskredytowane a jak sam mapisal XSLT "bawil sie" krotko (nie mnie oceniac ale moze za krotko?). Dalej pisze, ze nic mu nie wychodzilo a to nie jest wina XSLT (zezeli by pokusic sie o skazywanie winnych czego nie jestem zwolennikiem to albo On sam jest winny albo php ale napewno nie XSLT)[..]

nic z tych, zeczy moze zeczywiscie za krotko pracowalem z XSLT ale sokoro nie moglem generowac dynamicznie zawartosci owego pliku to po co mialem w tym robic.. podaj przyklad jakis.
hawk
Cytat
2. I teraz chcem wyjasnic, ze nie jest to post skierowany przeciwko php (poniewaz innego tego rozdzaju jezyki radza sobie na tym polu jeszcze gorzej). A zupelnie odwrotnie uwazam, ze php w tej dziedzinie jest najlepsze (ale nie dosc dobre - prosze zrwocic uwage na to sformuowanie).

Nie przesadzajmy z gloryfikacją php!
"Inne tego rodzaju języki" to ASP.NET i Java. Co do pierwszego się nie wypowiadam, bo nie znam. Ale stwierdzenie, że Java radzi sobie w temacie XML gorzej niż php byłoby gigantycznym nadużyciem. Wręcz przeciwnie, w porównaniu z Javą trudno mówić o wsparciu XML ze strony php.
Crimson, Xerces, Saxon, Xalan...
JAXP, JDOM, JAXB... nawet SAX wymyślono dla Javy.
W Javie (pod kątem aplikacji internetowych) wszystko oparte jest na XML - konfiguracja Tomcata, Struts, nawet jest cały framework wokół XSL (Cocoon).
A php? Expat i Sablotron. Dobrze przynajmniej że w wersji 5 zamienili Expata na libxml, bo to porażka, żeby jedyny parser nie potrafił walidować nie tylko z XSD, ale nawet z DTD.

Nie zrozumcie mnie źle - to nie jest krytyka php. No dobra, jest. php nie jest jeszcze dojrzały i jakby "przegapił" XML. Mamy 2 standardowe biblioteki do PDF i ani jednego dobrego parsera XML.

Cytat
A co pozwala nam na optymistyczne patrzenie na przod to to, ze php bardzo dynamicznie sie rozwija i wczesniej czy pozniej spelni sie moje (Wasze) mazenie o zadowalajacej "wspolpracy" z XSLT.

Niech najpierw zrobią zadowalającą współpracę x DTD/XSD, a potem wezmą sie za libxslt.
dragossani
W pelni zgadzam sie z hawkiem. Brak bibliotek obslugujacych w PHP4 walidacje XML zgodnie z XMLSchema to przkra niedogodnosc. Java ma ta sprawe zalatwiona lepiej. Nie ma sie potem co dziwic, ze najciekawsze projekty (np. FOP) sa robione pod Jave, a nie php. Zeby sie potem takim FOP'em pobawic, trzeba robic jakies ekwilibrystyczne sztuczki (w PEAR jest klasa do obslugi FOP z linii polecen bodajze).
spenalzo
No dobra, a wracając do głównego tematu tego postu.... Wie ktoś co może być nie tak?
shima
Cytat
No dobra, a wracając do głównego tematu tego postu.... Wie ktoś co może być nie tak?


Spróbuj taką preambułę w XSL-u:

[xml:1:a535ed60f4]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">[/xml:1:a535ed60f4]

i powiedz czy działa... Strzelam na zasadzie porównań, bo też zaczynam...
spenalzo
Nadal nic - sprawdzłem pod Operą 7.22 i IE 5.0

Przy okazji - jak wyciągnąć ze znacznika np. <ID>321</ID> wartość 321?
W tej książce pisze raz <xsl:value-of...> a raz <xsl:process...> a nie jest jasno powiedziane co do czego :?
shima
Cytat
Nadal nic - sprawdzłem pod Operą 7.22 i IE 5.0

Przy okazji - jak wyciągnąć ze znacznika np. <ID>321</ID> wartość 321?
W tej książce pisze raz <xsl:value-of...> a raz <xsl:process...> a nie jest jasno powiedziane co do czego :?


IE 5.0 ma problemy z XML-em - tak słyszałem. Opera 7.11 wyświetla mi co chciałem, ale nie tak jak chciałem (robi jeden wiersz z tabeli). Mozilla
1.4.1 rozumie wszystko biggrin.gif

Wybieranie zmiennych pracuje u mnie tak:

[xml:1:932f73a579]<xsl:value-of select="costam"/>[/xml:1:932f73a579]

ale o szczegóły nie pytaj, po prostu pracuje aaevil.gif
czerwoony
:idea: np. tak

test.xml
[xml:1:83cba1864e]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<dane>
<plik>
<ID>16</ID>
<nazwa_org>123.m3u</nazwa_org>
<userid>4</userid>
<czas>1069200139</czas>
<opis>Wprowadź opis pliku</opis>
<rozmiar>3340</rozmiar>
<rodzaj>0</rodzaj>
</plik>
<plik>
<ID>13</ID>
<nazwa_org>logo.jpg</nazwa_org>
<userid>4</userid>
<czas>1069199825</czas>
<opis>To jest opis</opis>
<rozmiar>26039</rozmiar>
<rodzaj>1</rodzaj>
</plik>
<plik>
<ID>12</ID>
<nazwa_org>index.php</nazwa_org>
<userid>4</userid>
<czas>1069193326</czas>
<opis>Wprowadź opis pliku</opis>
<rozmiar>44</rozmiar>
<rodzaj>1</rodzaj>
</plik>
</dane>
[/xml:1:83cba1864e]

test.xslt
[xml:1:83cba1864e]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
version="1.0"
encoding="UTF-8"
indent="yes"/>

<xsl:template match="/">
<html>
<head>
<title>Dane XML</title>
<style>
@media all {
table {
font-family: Tahoma;
font-size: 10pt;
}
}
</style>
</head>
<body>
<xsl:apply-templates select="dane"/>
</body>
</html>
</xsl:template>

<xsl:template match="dane">
<table border="1">
<tr>
<th>ID</th>
<th>nazwa_org</th>
<th>userid</th>
<th>czas</th>
<th>opis</th>
<th>rozmiar</th>
<th>rodzaj</th>
</tr>
<xsl:for-each select="plik">
<tr>
<td><xsl:value-of select="ID"/></td>
<td><xsl:value-of select="nazwa_org"/></td>
<td><xsl:value-of select="userid"/></td>
<td><xsl:value-of select="czas"/></td>
<td><xsl:value-of select="opis"/></td>
<td><xsl:value-of select="rozmiar"/></td>
<td><xsl:value-of select="rodzaj"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

</xsl:stylesheet>
[/xml:1:83cba1864e]
xslt jest bardzo prosty i bardzo zawansowany. jak chcesz sie nim pobawic to polecam ci program Altova XML SPY 2004, to istny kombajn xml i takie transformacjie jak wyze zrobisz w 10m ,ale jak chcesz zeby to mialo rece i nogi to trzeba recznie.
MaKARON
http://mak.tuwima.net/projekty.php

Zajrzyjscie sobie do mnie, jest do sciagniecia pewien stary projekt z dosc ciekawymi arkuszami. Dodatkowo mozna na sronie zobaczyc dzialanie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.