Gegevens ophalen uit XML bestand

Status
Niet open voor verdere reacties.

damnsharp

Terugkerende gebruiker
Lid geworden
6 jan 2012
Berichten
1.394
Goedemorgen,
Ik wil gegevens uit een XML bestand ophalen, dat is nieuw voor mij. Ik heb al diverse scripts gevonden maar krijg het nog niet goed voor mekaar met "mijn" xml bestand.

Een test php bestand wat ik vond dat werkt is:
Code:
<?php
    $feed = file_get_contents("http://helgesverre.com/blog/feed");
    $xml = simplexml_load_string($feed);

    // Display the first post title
    echo $xml->channel->item[0]->title;
?>

Dus toen dacht ik het volgende, maar het lukt mij niet om 1 review te tonen (dat is voor nu de bedoeling):
Code:
<?php
    $feed = file_get_contents("https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7");
    $xml = simplexml_load_string($feed);


    // Display the first review
    echo $xml->reviews->review[0]->toelichting; //niets wordt getoont... dat is wel de bedoeling

    echo '</br>---- test gehele feed tonen ------</br>';
    print_r($feed);
?>


Oh als ik print_r($xml); doe blijft het leeg, dus het parsen gaat denk ik niet goed.
 
Er gaat zeker wat mis merk ik nu; ik heb code om het te testen gevonden en die geeft error aan:

Code:
<?php
$url = "https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7";
$xml = simplexml_load_file($url);

if (($response_xml_data = file_get_contents($url))===false){
    echo "Error fetching XML\n";
} else {
   libxml_use_internal_errors(true);
   $data = simplexml_load_string($response_xml_data);
   if (!$data) {
       echo "Error loading XML\n";
       foreach(libxml_get_errors() as $error) {
           echo "\t", $error->message;
       }
   } else {
      print_r($data);
   }
}
?>

error is: Error loading XML Start tag expected, '<' not found
 
Laatst bewerkt:
Laten we eerst even debuggen.....
Roep die url eens direct aan via file_get_contents() , krijg je de gewenste XML? Ik heb een vermoeden dat de XML-feed stuk is en dat simpleXML er niks mee kan.
 
Laatst bewerkt:
De pagina is XML maar heeft inderdaad geen XML tag. Het "vergeet" de eerste regel.
 
Gevalletje: Mail die site!
 
Als alternatief kun je natuurlijk zelf de eerste regel ingeven, de site appenden en dan verwerken. 2 regels extra code :p
 
Bedankt @php4u en @wampier; dus het ligt niet helemaal aan mij zo te lezen ;-)
Ik ga ze een mail sturen.

En @wampier als je een oplossing hiervoor hebt, graag!
 
Die oplossing zou ik niet doen, straks is hij weer invalid als de site het fixt.
 
zoiets?
PHP:
$test = '<?xml version="1.0" standalone="yes"?>';
$test .= file_get_contents($url);
$xml = simplexml_load_string($test);

geen idee of er een newline verplicht is tussen <?xml> en <xmlns> en mogelijk moet je nog een beetje debuggen want ik grijp dit even uit de losse pols :)

Maar goed, oplossen bij de bron is natuurlijk beter.. Overigens kunnen de meeste XML libraries prima overweg met de missende regel net als de meeste browsers. SimpleXML is dus inderdaad behoorlijk "simpel", maar niet erg flexibel.
 
Top @wampier, dat ga ik uitproberen :) Ik kom er straks op terug.

Heb maker ook bericht gestuurd want als ik bijv probeer http://countwordsfree.com/xmlviewer en dan de URL gebruik en Tree view mode doe krijg ik meteen error Invalid XML.
 
Maar straks fixxen ze hun XML-feed en dat werkt hij bij jouw niet meer omdat er dubbele tags boven staan.
Ga eerst even navragen hoelang het duurt voordat ze het gerepareerd hebben, voordat je zulke 'hacks' toepast.
 
Contact gehad maar ze willen niets aanpassen. Volgens hun is er niets aan de hand... grrrr

PHP:
<?php
$url = "https://api.advieskeuze.nl/locatie/details/ff2463d1-354d-894b-87d1-882a8eb858e5/digimakelaars/d3705873-361c-4871-b271-99a5892f08f7";
$test = '<?xml version="1.0" standalone="yes"?>';
$test .= file_get_contents($url);
$xml = simplexml_load_string($test);

if (($response_xml_data = file_get_contents($url))===false){
    echo "Error fetching XML\n";
} else {
   libxml_use_internal_errors(true);
   $data = simplexml_load_string($response_xml_data);
   if (!$data) {
       echo "Error loading XML\n";
       foreach(libxml_get_errors() as $error) {
           echo "\t", $error->message;
       }
   } else {
      print_r($data);
   }
}
?>

Als ik voor het if-statement een echo $test; plaats dan krijg ik een output maar niet als ik een echo $xml; doe; dat lijkt me ook een vaag teken.
 
Ik heb hierover inmiddels ook een aantal keer contact gehad met *****. Ik kan de XML helaas niet aanpassen. Er zijn te veel andere klanten die probleemloos met de huidige versie werken en wil hen geen verandering opleggen. De XML is valide, de XML declaration is optioneel voor XML 1.0 (https://stackoverflow.com/questions...ml-declaration-xml-version-1-0-encoding-utf-8 en https://stackoverflow.com/questions...le-require-an-xml-declaration/7007781#7007781). Wellicht kan je in de parser nog kijken of je uit kan gaan van de defaults 1.0 en UTF-8.

Je kan onze API met ?json=true in de querystring aanroepen om de response als JSON terug te krijgen. Wellicht is JSON eenvoudiger in jullie omgeving in te laden.

Of je gebruikt dus JSON:
https://api.advieskeuze.nl/locatie/...3705873-361c-4871-b271-99a5892f08f7?json=true
 
Laatst bewerkt:
Bedankt voor meedenken @php4u. Ik heb de gegevens nu dankzij andere helpmij collega zie PHP/"PHP review ophalen via API". Met die thread kwam ik eerst niet verder en toen in XML gepost.
Dus ga deze ook op opgelost zetten.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan