2016-05-23 6 views
-1

Ich versuche die XML-Datei von einer URL zu bekommen. Aber ich bekomme nur den Text aus der Datei, ohne Syntax.PHP cURL kann kein XML erzeugen

Mein Code:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'https://services.mobile.de/search-api/search?country=DE&sort.field=makeModel&sort.order=ASCENDING'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '. base64_encode("username:password"), 'Accept: 
    application/xml')); 
    $xml = new SimpleXMLElement(curl_exec($ch));//line 14 
    curl_close($ch); 
    print_r($xml); 

Meine Leistung:

....sensorsBlackEuro5PetrolManual gearboxAutomatic air conditioningUsed vehicle150.90525114.812090CarSmall CarVolkswagenPoloCentral lockingElectric windowsImmobilizerPower Assisted SteeringABSESPFull Service HistoryElectric side mirrorOn-board computerCD playerTuner/radioIsofix (child seat anchor points)Parking sensor 

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in /Applications/XAMPP/xamppfiles/htdocs/test.php on line 14 

Warning: SimpleXMLElement::__construct(): 1 in /Applications/XAMPP/xamppfiles/htdocs/test.php on line 14 

Warning: SimpleXMLElement::__construct():^in /Applications/XAMPP/xamppfiles/htdocs/test.php on line 14 

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /Applications/XAMPP/xamppfiles/htdocs/test.php:14 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/test.php(14): SimpleXMLElement->__construct('1') #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/test.php on line 14 

Update:

ich jetzt die richtige Zeichenfolge im Browser mit diesem:

echo '<pre>'; 
echo htmlspecialchars(print_r(curl_exec($ch), true)); 
echo '</pre>'; 

Aber wenn ich versuche zu verwenden:

$sxe = simplexml_load_string($re); 
print_r($sxe); 

ich dies nur erhalten:

SimpleXMLElement Object () 
+0

Wenn Sie XML im Browser öffnen, können Sie gültiges XML sehen oder nicht? – hakiko

+1

Wissen Sie, dass die API XML zurückgibt? Was passiert, wenn Sie die Anfrage mit curl über die Befehlszeile senden? –

+0

Sind Sie sicher, dass Sie eine XML-Datei von Ihrer Anfrage erhalten? Was bedeutet '$ response = curl_exec ($ ch); echo htmlspecialchars ($ response); 'zeigen Sie? –

Antwort

1

new SimpleXMLElement() mit nur einem Argument XML erwartet (manual) und curl_exec($ch) kehrt true oder false standardmäßig (manual). es ist also klar, warum dies nicht funktionieren:

Gibt bei Erfolg zurück oder FALSE bei einem Fehler:

$xml = new SimpleXMLElement(curl_exec($ch));//line 14 

Sie wahrscheinlich der Spitze bei curl_exec Handbuch Seite folgen wollen. Wenn jedoch die CURLOPT_RETURNTRANSFER-Option festgelegt ist, wird das Ergebnis auf Erfolg, FALSE bei Fehler zurückgegeben.

... aber Sie müssen immer noch überprüfen, dass es nicht false ist. Wenn Sie die Fehlerüberprüfung auslassen, wird Ihr Code gelegentlich fehlschlagen.

+0

mit curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); Ich bekomme nur SimpleXMLElement Object() – FlugRost

+1

Verarbeiten Sie die Antwort nicht über mehrere Codeebenen, bevor Sie überhaupt wissen, ob es gut ist. Beginnen Sie mit z.B. var_dump(). –

+0

Das Problem ist, dass curl nur eine Liste von Stichen aus der ursprünglichen XML-Datei zurückgibt. Die XML-Syntax fehlt. – FlugRost