Avatar billede bandersen2200 Nybegynder
11. maj 2011 - 19:03 Der er 3 kommentarer og
1 løsning

PHP fejl: 'String could not be parsed as XML'

Hej

Jeg modtager XML filer fra rejseplanens API. Jeg kører 3600 stationer igennem API´en også starter jeg forfra. Når jeg prøvet at lave gennemkølersen 2. gang når jeg kun til station 1625 hvor jeg for følgende fejl:

#########################################################

Warning:  SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 108: parser error : Extra content at the end of the document in C:\xampp\htdocs\excelRead\Rejseplanen.class.php on line 53

Warning:  SimpleXMLElement::__construct() [simplexmlelement.--construct]: </TripList>ist> in C:\xampp\htdocs\excelRead\Rejseplanen.class.php on line 53

Warning:  SimpleXMLElement::__construct() [simplexmlelement.--construct]:            ^ in C:\xampp\htdocs\excelRead\Rejseplanen.class.php on line 53

Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\xampp\htdocs\excelRead\Rejseplanen.class.php:53
Stack trace:
#0 C:\xampp\htdocs\excelRead\Rejseplanen.class.php(53): SimpleXMLElement->__construct('<?xml version="...')
#1 C:\xampp\htdocs\excelRead\StoppestederRejseplanenPHPExcel.php(87): Rejseplanen->searchDestAddress(11957181, 55749055, 'Skibby Kirke', 11852867, 55959435, 'Nyg??rdsvej 15 ...', '6.06.11', '07:55', true)
#2 {main}
  thrown in C:\xampp\htdocs\excelRead\Rejseplanen.class.php on line 53

#########################################################

Mit array ser ellers fint ud og når jeg efterføgende prøver at sende samme API i en browser virker den fint.

Min kode ser ud som følgende hvor det går galt:

#########################################################
    $query = array(
        'originCoordX'      => $XPosOrigin,
        'originCoordY'        => $YPosOrigin,
        'originCoordName'  => urlencode($address),
        'destCoordX'        => $XPosDist,
        'destCoordY'        => $YPosDist,
        'destCoordName'        => urlencode($DestAddress),
        'date'                => $date,
        'time'              => $time,
        'searchForArrival'  => (int)$arrival);
        //'useTog'            => (int)$use_tog);
       
       
        $content = self::getPage('http://xmlopen.rejseplanen.dk/bin/rest.exe/trip?' .
        unset($query);
        $this->_xml = new SimpleXMLElement($content);

#########################################################

$this->_xml = new SimpleXMLElement($content); er linjen der fejler. Er det muligt at udskive en fejl så scriptet fortsætter eller kan det løses ?

Jeg har forsøgt at tilføje extension=php_openssl.dll til min Apache server uden held.

Håber i kan hjælpe.
Avatar billede HBP2 Praktikant
11. maj 2011 - 19:31 #1
Fejlen er rapporteres er "Extra content at the end of the document" hvilket kunne tyde på at du ikke får en gyldig XML fil tilbage.
Prøv at udskrive $content og se hvad det er for noget snavs der følger med.
Avatar billede bandersen2200 Nybegynder
11. maj 2011 - 19:51 #2
Hej

Hvordan udskriver man $content når den består af følgende: $content = self::getPage('http://xmlopen.rejseplanen.dk/xxx/xxxxx/xxxxx'.http_build_query($query));

Har prøvet følgende:
echo $content;
print_r($content);

Må ikke oplyse den fulde sti pga. rejseplanen.dk
Avatar billede HBP2 Praktikant
11. maj 2011 - 21:28 #3
echo $content;

burde virker, $content er jo en streng
Avatar billede bandersen2200 Nybegynder
11. maj 2011 - 23:55 #4
Hej

Jeg fandt løsningen. Jeg sendte adresser afsted der ikke var UTF8 formateret og derfor fik jeg noget tilbage der ikke kunne fortolkes som en XML fil. Så jeg brugte føgende kommando på mine adresser:

utf8_decode(readDestAddress($data,$j));
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester