xml uitlezen
Goedemiddag,
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:
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!";
?>
Waar komt $getXML vandaan? Moet je niet eerst in <records> duiken voordat je door de <record>'s kan loopen?
Print anders $xml eens uit en kijk hoe 't is opgebouwd.
Print anders $xml eens uit en kijk hoe 't is opgebouwd.
$getXML is de output van een andere functie die xml levert.
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.
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.
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.
$xml kan niet geprint worden.
dus hier gaat het fout:
Toevoeging op 14/04/2011 16:05:02:
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.
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.
Documentje of string? Ik heb 't namelijk als string ingevoerd, dat is ook wat jij wil aangezien je "simplexml_load_string" doet.
Wil je een URL in laden? Doe dan zo iets:
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.
Dan gaat die $getXML toch echt verkeerd, want als ik het test werkt het gewoon.
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
Zo werkt het inderdaad bij mij ook, maar dit is geen oplossing aangezien ik een soap server heb. Dus op de client wordt er een functie opgevraagd. In dit geval insertTable(); Daarin geef ik de configuratie mee, de tabel waarin het ingevoerd moet worden en de xml die uitgelezen moet worden. Deze geef ik gewoon mee in een string. Als ik deze daarna return in mijn functie, zie ik wel degelijk dat hij is ontvangen. Alleen kan er in mijn server niks mee gedaan worden.
Terwijl ik bovenstaande code in mijn client heb gedraaid, en dan doet hij het wel.
Terwijl ik bovenstaande code in mijn client heb gedraaid, en dan doet hij het wel.




