database --> Php --> XML
Het probleem is namelijk dat dit het zo word weg geschreven
<markers>
<name title="adres">
<Naam>Maastricht</naam>
<type>gemeente</type>
Dit moet als volgt worden weggeschreven.
<markers>
<marker address="Louis Jansenplein 1, Groningen" label="dit is een huis">
<infowindow><![CDATA[<b>Dit is een huis</b><br/>Lees meer over <a href="http://www.eenwebsite.nl/" target="new">dit is een link</a>]]></infowindow>
</marker>
Dit is het script wat gegevens uit de database haalt en naar een xml file schrijft
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
// STORE DATABASE VARIABLES
$hostname_cnConnection = "localhost";
$database_cnConnection = "go";
$username_cnConnection = "root";
$password_cnConnection = "**";
$cnConnection = mysql_pconnect($hostname_cnConnection, $username_cnConnection, $password_cnConnection);
// CONNECT TO DATABASE
mysql_select_db($database_cnConnection, $cnConnection);
$query_rsRecordset = "SELECT * FROM markers";
$rsRecordset = mysql_query($query_rsRecordset, $cnConnection) or die(mysql_error());
$row_rsRecordset = mysql_fetch_assoc($rsRecordset);
$totalRows_rsRecordset = mysql_num_rows($rsRecordset);
// START STORING DATA IN VARIABLE TO PLACE IN XML FILE
if($totalRows_rsRecordset > 0) {
$strXML = "<?xml version=\"1.0\"?>\n";
// STORE NAME OF TABLE
$strXML = $strXML . "<markers>\n";
// STORE FIELD AND FIELD DATA IN ONE HIARCHY, REPEAT FOR MULTIPLE FIELDS
$strXML = $strXML . " <name title=\"PrimaryID\">\n";
do {
$strXML = $strXML . " <Naam>" . $row_rsRecordset['name'] . "</naam>\n";
$strXML = $strXML . " <type>" . $row_rsRecordset['type'] . "</type>\n";
} while ($row_rsRecordset = mysql_fetch_assoc($rsRecordset));
$strXML = $strXML . "</markers>";
$strXML = $strXML . " </name>\n";
// OPEN FILE, WRITE TO FILE, CLOSE FILE, CLOSE RECORDSET
$XMLFile = fopen("myxmlfile.xml", "w");
fwrite($XMLFile, $strXML);
fclose($XMLFile);
}
mysql_free_result($rsRecordset);
?>
// STORE DATABASE VARIABLES
$hostname_cnConnection = "localhost";
$database_cnConnection = "go";
$username_cnConnection = "root";
$password_cnConnection = "**";
$cnConnection = mysql_pconnect($hostname_cnConnection, $username_cnConnection, $password_cnConnection);
// CONNECT TO DATABASE
mysql_select_db($database_cnConnection, $cnConnection);
$query_rsRecordset = "SELECT * FROM markers";
$rsRecordset = mysql_query($query_rsRecordset, $cnConnection) or die(mysql_error());
$row_rsRecordset = mysql_fetch_assoc($rsRecordset);
$totalRows_rsRecordset = mysql_num_rows($rsRecordset);
// START STORING DATA IN VARIABLE TO PLACE IN XML FILE
if($totalRows_rsRecordset > 0) {
$strXML = "<?xml version=\"1.0\"?>\n";
// STORE NAME OF TABLE
$strXML = $strXML . "<markers>\n";
// STORE FIELD AND FIELD DATA IN ONE HIARCHY, REPEAT FOR MULTIPLE FIELDS
$strXML = $strXML . " <name title=\"PrimaryID\">\n";
do {
$strXML = $strXML . " <Naam>" . $row_rsRecordset['name'] . "</naam>\n";
$strXML = $strXML . " <type>" . $row_rsRecordset['type'] . "</type>\n";
} while ($row_rsRecordset = mysql_fetch_assoc($rsRecordset));
$strXML = $strXML . "</markers>";
$strXML = $strXML . " </name>\n";
// OPEN FILE, WRITE TO FILE, CLOSE FILE, CLOSE RECORDSET
$XMLFile = fopen("myxmlfile.xml", "w");
fwrite($XMLFile, $strXML);
fclose($XMLFile);
}
mysql_free_result($rsRecordset);
?>
Weet iemand iets...? ik krijg het maar niet voor elkaar!
Gewijzigd op 30/05/2010 17:35:29 door Ttdr black
Daarnaast kan je in plaats van 'echo' en handgemaakte XML misschien beter DOM, of in dit geval nog beter, XMLWriter gebruiken. Voordeel daarbij is dat het bijna geen geheugen kost om een enorm aantal markers naar een bestand te schrijven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// even voor testen
$db_markers = array(
array(
'address' => 'Louis Jansenplein 1, Groningen',
'label' => 'Dit is een huis',
'info' => '<b>Dit is een huis</b><br/>Lees meer over <a href="http://www.eenwebsite.nl/" target="new">dit is een link</a>'
)
);
$feed = new XMLWriter();
// verander dit naar 'myxmlfile.xml' voor schrijven naar bestand
// nu doet hij met php://output hetzelfde als 'echo'.
$feed->openURI('php://output');
$feed->setIndent(true);
$feed->startDocument('1.0', 'utf-8');
$feed->startElement('markers');
// dit wordt dan while($db_marker = mysql_fetch_assoc())
foreach($db_markers as $db_marker) {
$feed->startElement('marker');
$feed->writeAttribute('address', $db_marker['address']);
$feed->writeAttribute('label', $db_marker['label']);
$feed->writeCData($db_marker['info']);
$feed->endElement();
}
$feed->endElement();
$feed->endDocument();
?>
// even voor testen
$db_markers = array(
array(
'address' => 'Louis Jansenplein 1, Groningen',
'label' => 'Dit is een huis',
'info' => '<b>Dit is een huis</b><br/>Lees meer over <a href="http://www.eenwebsite.nl/" target="new">dit is een link</a>'
)
);
$feed = new XMLWriter();
// verander dit naar 'myxmlfile.xml' voor schrijven naar bestand
// nu doet hij met php://output hetzelfde als 'echo'.
$feed->openURI('php://output');
$feed->setIndent(true);
$feed->startDocument('1.0', 'utf-8');
$feed->startElement('markers');
// dit wordt dan while($db_marker = mysql_fetch_assoc())
foreach($db_markers as $db_marker) {
$feed->startElement('marker');
$feed->writeAttribute('address', $db_marker['address']);
$feed->writeAttribute('label', $db_marker['label']);
$feed->writeCData($db_marker['info']);
$feed->endElement();
}
$feed->endElement();
$feed->endDocument();
?>
Maar hoe krijg ik die cdata erin. en dat die met een nieuw adres begint inplaats van alle tabellen opsommen. want dat is wat het script nu doet.
het moet er dus zo uitzien want zo werkt het met de API
<markers>
<marker address="Louis Jansenplein 1, Groningen" label="Gemeente Cuijk">
<infowindow><![CDATA[<b>Gemeente Cuijck</b><br/>Lees meer over <a href="http://www.cuijk.nl/" target="new">Gemeent Cuijk</a>]]></infowindow>
</marker>
<marker address="zeewinde 9, Groningen" label="Gemeenteoplossingen">
<infowindow><![CDATA[<b>Gemeenteoplossingen</b><br/>Lees meer over <a href="http://www.gemeenteoplossingen.nl/" target="new">Gemeenteoplossingen</a> ]]></infowindow>
</marker>
<marker address="Mosae Forum 10, Maastricht" label="Gemeente Maastricht">
<infowindow><![CDATA[<b>Gemeente Maastricht</b><br/>Lees meer over <a href="http://www.maastricht.nl/" target="new">Gemeent Maastricht</a>]]></infowindow>
</marker>
</markers>
het is namelijk een script voor google maps api.!
waar een cms moet voor komen. met een mysql database. die automatisch de gegevens update op de site. !
maargoed.
simplexml is denk ik niet een optie. vanwege de slechte omgang met Cdata.
Zie mijn voorbeeld met XMLWriter, die doet het met writeCData().
was even een tijdje weg.
Jelmer rrrr op 30/05/2010 18:50:13:
Zie mijn voorbeeld met XMLWriter, die doet het met writeCData().
Jelmer ik krijg een fout bij het gedeelte met $feed = new XMLWriter();
// verander dit naar 'myxmlfile.xml' voor schrijven naar bestand
ik snap niet helemaal waar ik dan 'myxmlfile.xml moet zetten.? ik kijg elke keer een fout.