XML... wie kan me helpen ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 08:37:49
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>


De code die ik heb is nu :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!';
}
            
        }
    }

 

?>


Wie kan me s.v.p. helpen ?!

Groeten,
Kevin
 
PHP hulp

PHP hulp

02/07/2020 23:20:52
 
Jelmer -

Jelmer -

24/12/2010 09:38:43
Quote Anchor link
"FALSE" != false
"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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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');
?>
Gewijzigd op 24/12/2010 09:41:00 door Jelmer -
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 14:44:49
Quote Anchor link
Bedankt Jelmer voor je snelle reactie!

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 ?
 
- Ariën -
Beheerder

- Ariën -

24/12/2010 14:52:10
Quote Anchor link
Die var_dump is meer bedoeld ter simpele debugging....
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 14:55:31
Quote Anchor link
Wat ik zie is nu : (!bool(false))

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
 
- Ariën -
Beheerder

- Ariën -

24/12/2010 15:05:24
Quote Anchor link
Ik houd van simplexml, hiermee kan je XML's uitlezen.

http://www.w3schools.com/PHP/php_xml_simplexml.asp
Gewijzigd op 24/12/2010 15:06:23 door - Ariën -
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 15:17:49
Quote Anchor link
oh dus je krijgt zoiets ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

  

$xml
= simplexml_load_file('api_url');
//informatie ophalen en ze in het object $users te stoppen
$users = simplexml_load_string($xml);


foreach ($users->user as $user) {
    echo 'Command: '. $user->command;
    echo "\n";
    echo 'Domein: '. $user->sld;
    echo "\n\nTLD:\n";
    echo 'TLD: '.$user->tld.'';
    }

?>
Gewijzigd op 24/12/2010 15:24:26 door Kevin van Leeuwen
 
- Ariën -
Beheerder

- Ariën -

24/12/2010 15:25:26
Quote Anchor link
ja, probeer het eens.
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 15:29:14
Quote Anchor link
nopz, foreach fout, volgensmij ben ik nu weer een stap verder gekomen :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$xmlObj = simplexml_load_file("api-url");
 
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
 
- Ariën -
Beheerder

- Ariën -

24/12/2010 15:30:10
Quote Anchor link
dat wordt dan debuggen:

var_dump($xmlObj->channel->order)

print_r() kan ook zeker hulp bieden :-)
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 15:32:29
Quote Anchor link
er staat NULL
 
Mick ForSure

Mick ForSure

24/12/2010 15:32:50
Quote Anchor link
Op w3schools staat het zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$xml
= simplexml_load_file("test.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child)
  {

  echo $child->getName() . ": " . $child . "<br />";
  }

?>


Probeer de childs uit te lezen in 1e instantie ;)
 
Kevin van Leeuwen

Kevin van Leeuwen

24/12/2010 15:35:03
Quote Anchor link
nu zie ik channel en order staan,
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
 
Kevin van Leeuwen

Kevin van Leeuwen

27/12/2010 19:51:53
Quote Anchor link
hmm, ben vandaag weer bezig geweest ?
Ik kom er niet uit :-(

Wie kan me helpen ? Hoe controlleer je dan zoiets?

groet,
Kevin
 
Kevin van Leeuwen

Kevin van Leeuwen

28/01/2011 11:15:26
Quote Anchor link
iemand nog ideeën ?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.