2010-11-09 16 views
6

Ich habe ein Skript, das einige XML-Dateien (ADF) analysiert. Manchmal erhalten wir gebrochene XML-Daten (dh Syntax, kein Ende-Tag, etc.).PHP Abfangen eines SimpleXMLElement Parse-Fehlers

SimpleXMLElement wirft einen Fehler und tötet mein Skript, wie so etwas wie $xml_body = new SimpleXMLElement ($adf_xml); zuordnen konnte und die Parse-Ausnahme fangen?


abgefangene Ausnahme 'Exception' with message 'String nicht als XML analysiert werden' in /home//Work//script/email_leads.php:46
Stapelüberwachung:
0/home //Work//script/email_leads.php(46): SimpleXMLElement -> __ Konstrukt ('<? Xml version = "...')
1 /home//Work//script/email_leads.php(97): (generateFeed)
2 {} Haupt

+0

Uhm, sind Sie sicher, dass hier mit SimpleXML ist das, was Sie wollen? Wenn Sie nicht wohlgeformte Daten erwarten, sollten Sie drakonische XML natürlich nicht verwenden, sondern stattdessen einen DOM-Parser verwenden. – NikiC

+0

Dies ist ein chron'd Skript, das Eingabe von einer INBOX (imap) ... –

+0

möglich Duplikat von [PHP: Ausnahme fangen und Ausführung fortsetzen, ist es möglich?] (Http://stackoverflow.com/questions/2132759/php-catch-exception-und-continue-execution-is-it-posable) – hakre

Antwort

4
libxml_use_internal_errors(true); 
+0

libxml_use_internal_errors räumt die Fehlerprotokolle ein wenig auf, mein Skript wird immer noch sterben, wenn es den Parse-Fehler auslöst ... Danke für die Hilfe/tip tho :) –

+0

Ich stimme einmal für die oben gewählte Antwort, aber ich denke, es ist besser, den Fehler durch die hier genannte Funktion zu unterdrücken. Und Sie verwenden libxml_get_errors oder libxml_get_last_error, um herauszufinden, was vor sich geht. – cwhsu

11

Ok, also scheinbar XML fangen Fehler Parse ist ein wenig von einem Heiligen Gral ... Ich landete nur

try { $x = new SimpleXMLElement($y); } catch (Exception $e) { echo $e; } 
+4

Versuch/Fang scheint nicht mit SimpleXMLElement zu arbeiten. Oder zumindest nicht für das Laden einer Nicht-XML-Datei für mich. – Jake

+3

Ich fand, das hat auch nicht für mich funktioniert. Ich musste verwenden: $ x = new \ SimpleXMLElement ($ xmlString, LIBXML_NOERROR); Dies scheint mir eine abfangbare Ausnahme zu geben. Als Referenz siehe PHP Handbuch für [LIBXML_NOERROR] (http://php.net/manual/en/libxml.constants.php) – PanPipes

0

xml_parse gibt einen booleschen Wert, der angibt, ob das XML erfolgreich analysiert wurde. Daher sollte diese Arbeit:

$fp = fopen($xml_file, "r"); 
$xml_data = fread($fp, 80000); 

if(!(xml_parse($xml_parser, $xml_data, feof($fp)))){ 
    # do something 
} 
Verwandte Themen