SimpleXML-werpwaarschuwingen - hoe te vangen?

Ik heb wat problemen met het bepalen van wat er aan de hand is met simplexml_load_string() Ik gebruik de onderstaande code om xml te renderen .... wanneer ik deze code uitvoer krijg ik foutmeldingen zoals:

Message: simplexml_load_string() [function.simplexml-load-string]: Entity: line 94: parser error : Opening and ending tag mismatch: meta line 15 and head

Eventuele ideeën over hoe ik deze waarschuwingen kan vangen? libxml_get_errors heeft geen effect.

                $response = simplexml_load_string($response);
                var_dump($response);
                if (count(libxml_get_errors()) > 0) {
                    print_r(libxml_get_errors());
                }

                if (is_object($response)) { //returns true when warnings are thrown
                    //process response
                } else {
                    //record error
                }
0
U laadt een ongeldig XML-bestand. Misschien delegeer het probleem aan de man die het levert?
toegevoegd de auteur FailedDev, de bron

2 antwoord

libxml_use_internal_errors(true);//!!!

$elem = simplexml_load_string($xml);
if($elem !== false)
{
   //Process xml structure here
}
else
{
    foreach(libxml_get_errors() as $error)
    {
        error_log('Error parsing xml file ' . $file . ': ' . $error->message);
    }
}
11
toegevoegd
De foutafhandeling is nog erger. De waarschuwing geeft meer specifieke berichten over het verkeerde XML-brongedeelte dan de foutafhandeling kan geven. Deze laatste tonen alleen kolom, regel die moeilijk is om het foutgedeelte te lokaliseren als het XML-bronbestand niet goed is gecodeerd.
toegevoegd de auteur Scott Chu, de bron
Dit antwoord verhindert de waarschuwingen niet, het geeft alleen meer informatie over de fouten weer. Gebruik set_error_handler() om de waarschuwingen te voorkomen, zoals in dit antwoord: stackoverflow.com/a/17012247/204842
toegevoegd de auteur Russell G, de bron

In mijn situatie veranderde server die xml deelde, hun http in https. Daarom waren we bezig met het downloaden van het oude XML-padbestand, dat in dit geval "beschadigd" was. Dat is waarom we de fout hadden.

XML-bestanden laadden perfect omdat ik het https-probleem (browser redirect) niet zag.

0
toegevoegd