Ik heb een database gemaakt met MySQL, maar nu wil ik daar een XML-bestand uit halen met php. Hoe moet ik dit aanpakken? Ik heb geprobeerd in het xml bestand de print optie te gebruiken, maar dit werkt niet zoals in html... helaas...
Persoonlijk zou ik dat bestand eerst keurig opsplitsen in alle verschillende soorten data, op basis daarvan een datamodel maken en dan de boel keurig in de database wegschrijven. XML in de database zetten, maakt de data uitermate slecht toegankelijk, je kunt dan beter kiezen om de boel gewoon als een xml-file in een directory te zetten. Dat is een stuk eenvoudiger beschikbaar en de database heeft met jouw huidige opzet toch geen toegevoegde waarde.
nee, klopt.. maar het is een oefenopdracht. Ik heb met een html/php pagina data in een database gestopt, nu moet ik deze er weer uithalen. Maar deze data moet in een xml pagina krijgen.. en dan xslt weer in html zetten.. Heel omslachtig natuurlijk.. maar zo moet ik het doen...
Het blijft een slecht plan om xml in de database op te slaan, je kunt beter een xml-file maken op basis van de gegevens die in de database staan. Daar kun je bv. de SAX-parser voor gebruiken, zie php.net
Verder zou het volgens mij mogelijk moeten zijn om een header mee te geven aan de xml-data die jij uit de database haalt. Wanneer je hierin zet dat het gaat om xml, dan zal de browser dit ook als xml gaan behandelen.
<?php
header('Content-Type: text/xml');
// edit: afhankelijk van de character-set kun je ook de volgende nodig hebben:
header('Content-Type: application/xml');
?>
Hier een voorbeeldje met de header, wanneer je dit gaat testen in FireFox, zie je de verschillen. Met header wordt het als XML behandeld, zonder de header gewoon als een stuk tekst.
<?php
$string = "<?xml version='1.0'?>
<!DOCTYPE chapter SYSTEM \"/just/a/test.dtd\" [
<!ENTITY plainEntity \"FOO entity\">
<!ENTITY systemEntity SYSTEM \"xmltest2.xml\">
]>
<chapter>
<TITLE>Title &plainEntity;</TITLE>
<para>
<informaltable>
<tgroup cols=\"3\">
<tbody>
<row><entry>a1</entry><entry morerows=\"1\">b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
&systemEntity;
<section id=\"about\">
<title>About this Document</title>
<para>
<!-- this is a comment -->
</para>
</section>
</chapter>";
header('Content-Type: text/xml'); // haal deze regel maar eens weg en zie het verschil
echo $string;
?>