XML... wie kan me helpen ?
Ik ben bezig met een XML-parser, echter lukt dit niet.
de XML-api is een registratiesysteem, wat ik wil is :
indien <order_complete> is FALSE dat er staat:
order niet succesvol, en anders wel!
Ik ben redelijk bekend met PHP en XML niet, graag zou ik
wat hulp willen :-)
hieronder zie je de codes:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <channel>
- <order>
<order_id />
<uwdomein</sld>
<tld>nl</tld>
<status_code>XMLERR 69</status_code>
<status_description>API-calls vanaf dit IP adres zijn niet toegestaan voor deze gebruiker.</status_description>
<price>0</price>
<details>IP niet toegestaan</details>
<order_complete>FALSE</order_complete>
<done>TRUE</done>
</order>
</channel>
- <channel>
- <order>
<order_id />
<uwdomein</sld>
<tld>nl</tld>
<status_code>XMLERR 69</status_code>
<status_description>API-calls vanaf dit IP adres zijn niet toegestaan voor deze gebruiker.</status_description>
<price>0</price>
<details>IP niet toegestaan</details>
<order_complete>FALSE</order_complete>
<done>TRUE</done>
</order>
</channel>
De code die ik heb is nu :
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
// elementen ophalen uit api en vervolgens tonen //
//define the source of the feed
define(feed,'apurl');
//recive file form server
$xml_feed = file_get_contents(feed);
//create a xml phraser
$xml_praser = xml_parser_create();
//tell the vars to the xml phrasers
xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
//lets phrase ^^
xml_parser_free($xml_praser);
//generate the headlines
for($i = 0;!empty($xml_index['REGISTER'][$i]);$i++){
if($i == 0){
echo '<strong>Register domain: '.$xml_keys[$xml_index['SLD'][$i]]['value'].'</strong><br />';
}
else{
if($xml_keys[$xml_index['order_complete'][$i]]['value']==FALSE){
echo 'order niet succesvol';
}else{
echo 'order aangevraagd!';
}
}
}
?>
// elementen ophalen uit api en vervolgens tonen //
//define the source of the feed
define(feed,'apurl');
//recive file form server
$xml_feed = file_get_contents(feed);
//create a xml phraser
$xml_praser = xml_parser_create();
//tell the vars to the xml phrasers
xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
//lets phrase ^^
xml_parser_free($xml_praser);
//generate the headlines
for($i = 0;!empty($xml_index['REGISTER'][$i]);$i++){
if($i == 0){
echo '<strong>Register domain: '.$xml_keys[$xml_index['SLD'][$i]]['value'].'</strong><br />';
}
else{
if($xml_keys[$xml_index['order_complete'][$i]]['value']==FALSE){
echo 'order niet succesvol';
}else{
echo 'order aangevraagd!';
}
}
}
?>
Wie kan me s.v.p. helpen ?!
Groeten,
Kevin
"FALSE" == "FALSE",
Je zal moeten vergelijken op de string FALSE, niet op de boolean waarde. In PHP is alleen "", 0, null, array() en vast nog wel wat false, maar een niet-lege string is niet false, ook al is de inhoud letterlijk "false".
Edit: in mijn PHP (5.3.3) worden alle element-namen naar uppercase omgezet in $xml_index, jij hebt er order_complete in kleine letters staan. Misschien dat dat ook nog mis gaat. Deze werkt bij mij:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?>
<channel>
<order>
<order_id />
<sld>uwdomein</sld>
<tld>nl</tld>
<status_code>XMLERR 69</status_code>
<status_description>API-calls vanaf dit IP adres zijn niet toegestaan voor deze gebruiker.</status_description>
<price>0</price>
<details>IP niet toegestaan</details>
<order_complete>FALSE</order_complete>
<done>TRUE</done>
</order>
</channel>';
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $xml_keys, $xml_index);
xml_parser_free($parser);
var_dump($xml_keys[$xml_index['ORDER_COMPLETE'][0]]['value'] == 'FALSE');
?>
$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?>
<channel>
<order>
<order_id />
<sld>uwdomein</sld>
<tld>nl</tld>
<status_code>XMLERR 69</status_code>
<status_description>API-calls vanaf dit IP adres zijn niet toegestaan voor deze gebruiker.</status_description>
<price>0</price>
<details>IP niet toegestaan</details>
<order_complete>FALSE</order_complete>
<done>TRUE</done>
</order>
</channel>';
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $xml_keys, $xml_index);
xml_parser_free($parser);
var_dump($xml_keys[$xml_index['ORDER_COMPLETE'][0]]['value'] == 'FALSE');
?>
Gewijzigd op 24/12/2010 09:41:00 door Jelmer -
Maar nu staat er bool false,
kun je dan gewoon met een
if($var_dump){
echo 'niet geactiveerd';
}else{
echo 'geactiveerd';
}
controleren of het gelukt is ? Echter werkt dit niet ?
Wat doe ik fout ?
Die var_dump is meer bedoeld ter simpele debugging....
hoe kan ik het dan het beste de if en else controlleren :S
in php is het if($var){
}else{
}
Maar hoe is het dan bij XML, sorry dat ik zo erg ben :P
maar heb totaal geen ervaring met XML, hoe zou je het dan het
beste kunnen doen ?
Ben reuze benieuwd naar de oplossing!
groet,
kevin
Gewijzigd op 24/12/2010 14:58:20 door Kevin van Leeuwen
ja, probeer het eens.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$xmlObj = simplexml_load_file("api-url");
foreach ($xmlObj->channel->order as $item)
{
echo $item->command, '<br />';
}
foreach ($xmlObj->channel->order as $item)
{
echo $item->command, '<br />';
}
Maar nu zie ik :
Warning: Invalid argument supplied for foreach() in /home/kevin/domains/stylehosting.nl/public_html/klanten_login//fdaasd/test1.php on line 9
var_dump($xmlObj->channel->order)
print_r() kan ook zeker hulp bieden :-)
er staat NULL
Code (php)
Probeer de childs uit te lezen in 1e instantie ;)
het werkt!
alleen, onder order staat dit :
<order_id />
<command>register</command>
<sld>stylepages</sld>
<tld>nl</tld>
<status_code>XMLERR 69</status_code>
<status_description>API-calls vanaf dit IP adres zijn niet toegestaan voor deze gebruiker.</status_description>
<price>0</price>
<details>IP niet toegestaan</details>
<order_complete>FALSE</order_complete>
<done>TRUE</done>
Moet ik die dan foreachen, of hoe werkt dit ?
Ik wil nmk. dat als done=false is dat er een fout komt
en done=true een bericht van succes!
Toevoeging op 24/12/2010 19:39:37:
Heeft iemand een idee ?
Alvast bedankt!
Alvast : fijne feestdagen en een gezond / gelukkig 2010 iedereen!
Gewijzigd op 24/12/2010 15:35:56 door Kevin van Leeuwen
Ik kom er niet uit :-(
Wie kan me helpen ? Hoe controlleer je dan zoiets?
groet,
Kevin
iemand nog ideeën ?