Toon posts:

[PHP] XML XSL

Pagina: 1
Acties:

Verwijderd

Topicstarter
Er zijn al heel wat topics over geweest, maar ik heb nog een aantal vraagen en/of ik snap het nog niet helemaal.
XML : File die de data bevat
XSL : Opmaak/Layout ?

Ik ben bezig met een CMS voor mijn eigen website, ik wil alles uit een MySQL db halen. De layout, de styles, de content. Dmv een site.php?layout=1?style=1?pagina=1
(vb)
Nu vraag ik mij af of het dan misschien ook handig, snel, leuk is om met XML en XSL te gaan werken.
Ik begrijp dat de data uit de db in de XML file moet, de layout in de XSL. Maar kan dit met PHP? En hoe/waar moet je beginnen.En als ik dan een XML XSL file heb, hoe ga ik dan met die PHP om, hoe parse ik dus die XML, XSL?
Misschien dat iemand alles eens even wat duidelijker kan maken. ThanX

  • Hans
  • Registratie: Juni 1999
  • Niet online
CHeck eens naar de functionaliteiten van Sablotron in een willekeurige search of op phpbuilder.com. Daar kan je alles mee wat jij wilt.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MeneerPeer: en/of ik snap het nog niet helemaal.
XML : File die de data bevat
XSL : Opmaak/Layout ?
Dat snap je in ieder geval prima :)
Nu vraag ik mij af of het dan misschien ook handig, snel, leuk is om met XML en XSL te gaan werken.
Als je nog moet beginnen zou ik dat zeker doen. Een bestaande site ombouwen is niet zo zinvol over het algemeen. Met XML+XSL kan je je aan de ene kant concentreren op het aanbieden van data via je XML documenten. Deze transformeer naar een gewenste opmaak via XSL. De opmaak kan dus heel gemakkelijk aangepast worden en in de PHP code hoef je je niet druk te maken om de layout. XSL biedt ook voordelen boven templates. Het belangrijkste voordeel is in ieder geval dat je de data automatisch ook in data-formaat (XML dus) aanbiedt. Bij templates is dat niet mogelijk (tenzij je met een template XML genereerd natuurlijk ;) ).
Ik begrijp dat de data uit de db in de XML file moet, de layout in de XSL. Maar kan dit met PHP?
freak007 heeft hier een uitstekende en handige tutorial voor geschreven: http://130.89.202.141/tutorial/php_xslt.html
En hoe/waar moet je beginnen.
Dat kan je zelf bepalen. Het is wel handig om eerst te kijken hoe je data in XML gat representeren en welke verschillende bronnen er zijn, wat er daarbij geparameterizeerd kan worden etc. Wellicht is het handig om dan ook een DTD of een XML Schema van de bschikbare bronnen te maken.

Daarna kan je gelijk deze XML gaan opleveren door PHP te gaan coden. Maar je kan ook eerst een paar demo XML documenten maken en wat met XSL gaan stoeien. Belangrijk vind ik altijd dat je moet onthouden dat je heel gemakkelijk bronnen kan samenvoegen met XSL. Maak je XML documenten daarom niet al te overloaded en verwijs gewoon naar andere bronnen voor meer info.
En als ik dan een XML XSL file heb, hoe ga ik dan met die PHP om, hoe parse ik dus die XML, XSL?
Dat moet duidelijk zijn na de tutorial van freak007 :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Bedankt, die handleiding is ok. Ik ga me eerst eens goed inlezen, een goede database-structuur op papier zetten en dan eens lekker programmeren.
XSLT installeren in PHP
---------------------------------------------------------
Voordat je gebruik kan maken van de XSLT functies binnen PHP, moet je er voor zorgen dat de XSLT extensie is meegecompileerd. De meeste hosting providers hebben dit niet standaard gedaan, maar misschien willen ze het wel vor je doen na een mailtje.

Voor Linux:
Om de XSLT extensie te kunnen installeren, moet je eerst Sabletron en expat installeren, welke te vinden zijn op gingerall.com. Hierna moet je PHP opnieuw compileren met en aan configure de extra paramter --with-sablot meegeven.

IK begrijp dus dat dit een vereiste is, ik zal eens gaan proberen of dit werkt, anders een mail naar mijn provider...
*D... oh... volgens phpinfo() heb ik XML support... 'k zal eens checken

Verwijderd

Topicstarter
Volgens phpinfo():
------------------
xml
XML Support active
------------------
Maar
PHP:
1
2
3
<?
xslt_process($xsl, $xml, $result);
?>

Resulteert in : Fatal error: Call to undefined function: xslt_process() in /www/dynaweb/xmltest.php on line 8

Hoe zou ik dit dan toch kunnen oplossen, ik gebruik trouwens de volgende source om te testen :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
Transform(  join('', file('source.xml')),
            join('', file('source.xsl')));

function Transform($xml, $xsl) {
    // Transform the XML
    xslt_process($xsl, $xml, $result);
    echo $result;
}

?>  
?>

Verwijderd

Dan is xml support wel meegecompileerd maar sablot (om xsl en xml -> html) dus niet. Daar zul je toch echt bij de host om moeten vragen ben ik bang.

Verwijderd

Ik beb eigenlijk ook wel geinteresseerd in een andere oplossing, wat nou als er wel xml support is, maar geen sablot support (en je daar ook niet aan kunt komen). Zijn er dan nog opties? Is er een class in php die dan xsl en xml kan combineren tot iets moois? Of zou je zoiets zelf moeten maken (of ervan uitgaan dat de gebruiker IE6 gebruiken :? ).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan de XSL stylesheet inderdaad ook client-side laten toepassen (in de toekomst zal dat denk ik zeer veel gaan gebeuren). In principe kan je in recente browsers (Mozilla, IE6) gewoon je XML data bron met een link naar de stylesheet opleveren. Client-side wordt dit dan getransformeerd naar HTML.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ik heb de hosting provider gemaild... en zal eens afwachten wat daar uit komt.

Verwijderd

Topicstarter
- Link naar een handig script om data van een MySQL DB om te zetten naar een XML-bestand :
http://www.hotscripts.com/cgi-bin/dload.cgi?ID=11918

- Info over Sablotron
http://www.phpbuilder.com/columns/justin20001025.php3

- Info over PHP&Sablotron :
http://www.circle.ch/projects/?cat_id=2&art_id=2

Voor de mensen die nog zoeken. Misschien een paar tips.
Ik begrijp dus dat Sablotron de enige
Pagina: 1