xml uitlezen
Ik probeer met een functie, een xml bestand uit te lezen en vervolgens deze met een query in te voeren in de database. Aleen de xml die hij krijgt lijkt wel niet uitgelezen te kunnen worden. Dus ik ben benieuwd of iemand dat hier ziet.
Dit xml document krijgt hij voorgeschoteld:
<records>
<record>
<id>1</id>
<naam>Jack</naam>
<functie>IT'er</functie>
</record>
<record>
<id>2</id>
<naam>Koen</naam>
<functie>IT'er</functie>
</record>
</records>
en zo probeer ik hem te verwerken:
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
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
<?php
////////////////////////////////////////
//XML in string laden via simplexml
$xml = simplexml_load_string($getXML);
//Loop door de records
foreach ($xml->record as $children) {
$veldnamen = "";
$childnamen = "";
//voor ieder child in het record:
foreach($children->children() as $child) {
//veldnamen en values in variabelen zetten voor query
$veldnamen .= $child->getName() . ",";
$childnamen .= "'" . $child . "'" . ",";
}
//string een char korten maken ivm laatste komma
$veldnamen = substr($veldnamen, 0, -1);
$childnamen = substr($childnamen, 0, -1);
//Query doorvoeren met veldnamen en value variabelen uit foreach
mysql_query("INSERT INTO $tableName ($veldnamen) VALUES ($childnamen)");
}
mysql_close();
return "gluckt!";
?>
////////////////////////////////////////
//XML in string laden via simplexml
$xml = simplexml_load_string($getXML);
//Loop door de records
foreach ($xml->record as $children) {
$veldnamen = "";
$childnamen = "";
//voor ieder child in het record:
foreach($children->children() as $child) {
//veldnamen en values in variabelen zetten voor query
$veldnamen .= $child->getName() . ",";
$childnamen .= "'" . $child . "'" . ",";
}
//string een char korten maken ivm laatste komma
$veldnamen = substr($veldnamen, 0, -1);
$childnamen = substr($childnamen, 0, -1);
//Query doorvoeren met veldnamen en value variabelen uit foreach
mysql_query("INSERT INTO $tableName ($veldnamen) VALUES ($childnamen)");
}
mysql_close();
return "gluckt!";
?>
Print anders $xml eens uit en kijk hoe 't is opgebouwd.
die levert dat op de bovenstaande manier aan. en dat wordt in een variabel gestopt.
Deze variabel wordt als parameter doorgegeven aan de bovenstaande functie, die hem dus moet verwerken.
Maar je escape't de waardes niet. Want bij <functie> krijg jij dit: 'IT'er'.
Spot the error.
dus hier gaat het fout:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
////////////////////////////////////////
//XML in string laden via simplexml
$xml = simplexml_load_string($getXML);
?>
////////////////////////////////////////
//XML in string laden via simplexml
$xml = simplexml_load_string($getXML);
?>
Toevoeging op 14/04/2011 16:05:02:
Gerben Jacobs op 14/04/2011 15:59:51:
Ik krijg er wel gewoon de waardes uit, in $veldnamen en $childnamen.
Maar je escape't de waardes niet. Want bij <functie> krijg jij dit: 'IT'er'.
Spot the error.
Maar je escape't de waardes niet. Want bij <functie> krijg jij dit: 'IT'er'.
Spot the error.
Het zou best kunnen dat $veldnamen en $childnamen het doen. Maar omdat $xml geen waarde bevat, kan hier niks mee gedaan worden.
Wat ik best wel raar vind want $getXML geeft wel degelijk een xml documentje door.
Wil je een URL in laden? Doe dan zo iets:
Gerben Jacobs op 14/04/2011 16:10:47:
Ik wil het inderdaad als string aangeleverd krijgen via de parameters van mijn functie. Dus een url verwerken gaat dan zoiezo niet.
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
$getXML = '<?xml version="1.0" encoding="UTF-8"?>
<records>
<record>
<id>1</id>
<naam>Jack</naam>
<functie>IT\'er</functie>
</record>
<record>
<id>2</id>
<naam>Koen</naam>
<functie>IT\'er</functie>
</record>
</records>
';
$xml = simplexml_load_string($getXML);
//Loop door de records
foreach ($xml->record as $children) {
$veldnamen = "";
$childnamen = "";
//voor ieder child in het record:
foreach($children->children() as $child) {
//veldnamen en values in variabelen zetten voor query
$veldnamen .= $child->getName() . ",";
$childnamen .= "'" . $child . "'" . ",";
}
//string een char korten maken ivm laatste komma
$veldnamen = substr($veldnamen, 0, -1);
$childnamen = substr($childnamen, 0, -1);
echo '<p>'.$veldnamen.'<br/>'.$childnamen.'</p>';
}
?>
$getXML = '<?xml version="1.0" encoding="UTF-8"?>
<records>
<record>
<id>1</id>
<naam>Jack</naam>
<functie>IT\'er</functie>
</record>
<record>
<id>2</id>
<naam>Koen</naam>
<functie>IT\'er</functie>
</record>
</records>
';
$xml = simplexml_load_string($getXML);
//Loop door de records
foreach ($xml->record as $children) {
$veldnamen = "";
$childnamen = "";
//voor ieder child in het record:
foreach($children->children() as $child) {
//veldnamen en values in variabelen zetten voor query
$veldnamen .= $child->getName() . ",";
$childnamen .= "'" . $child . "'" . ",";
}
//string een char korten maken ivm laatste komma
$veldnamen = substr($veldnamen, 0, -1);
$childnamen = substr($childnamen, 0, -1);
echo '<p>'.$veldnamen.'<br/>'.$childnamen.'</p>';
}
?>
Gewijzigd op 14/04/2011 16:16:23 door Gerben Jacobs
Terwijl ik bovenstaande code in mijn client heb gedraaid, en dan doet hij het wel.