Bei der Analyse von XML -Daten mithilfe der XML_parse () -Funktion von PHP schlägt das Parsen häufig aufgrund von ungültigen oder fehlerhaften XML -Tags fehl. Diese Situation ist besonders häufig in XML -Zeichenfolgen, die von Benutzern eingegeben wurden, oder Daten aus unzuverlässigen Quellen (z. B. externe APIs, hochgeladen von Dritten). In diesem Artikel wird erläutert, wie diese Fehler ordnungsgemäß behandelt werden und versuchen, häufig häufig Probleme zu beheben, um Parsing -Fehler zu vermeiden.
xml_parse () ist Teil des XML-Parsers von PHP (basierend auf der Expat-Bibliothek), die XML-Daten über eine ereignisgesteuerte Weise analysiert:
$parser = xml_parser_create();
xml_parse($parser, $xmlString, true);
xml_parser_free($parser);
Wenn der XML in $ xmlString ungültig ist, gibt die Funktion FALSE zurück und Sie können detaillierte Fehlerinformationen über xml_get_error_code () und xml_error_string () erhalten.
Etikett ist nicht geschlossen:
<note><to>Tove</to><from>Jani</note>
Sonderzeichen sind nicht entkommen:
<message>5 < 10 & 7 > 3</message>
Nicht autorisierte Charaktere oder illegale Kodierungen
Falsche verschachtelte Struktur
Wenn Sie sich mit nicht standardmäßigen oder beschädigten XML befassen müssen, können Sie einige Strategien verwenden, um es vorzuprobieren oder zu beheben:
Die Domdocument- Klasse von PHP ermöglicht die Deaktivierung der Fehlerberichterstattung beim Laden von XML, wodurch versucht wird, fehlertolerant zu sein:
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$success = $doc->loadXML($xmlString);
if (!$success) {
foreach (libxml_get_errors() as $error) {
echo "Vorschläge reparieren:" . $error->message . "\n";
}
libxml_clear_errors();
}
Obwohl diese Methode möglicherweise nicht behoben ist, kann sie Ihnen sagen, was schief gelaufen ist.
Wenn Sie die Struktur von XML kennen, können Sie sie durch reguläre oder String -Austausch beheben:
function sanitizeXml($xml) {
// Illegal ersetzen & Charakter
$xml = preg_replace('/&(?!amp;|lt;|gt;|quot;|apos;)/', '&', $xml);
// Andere Regeln können bei Bedarf abgeschlossen werden
return $xml;
}
Sie können die XML -Parsen in eine Funktion einwickeln und die Verarbeitung herunterfahren, sobald sie fehlschlägt, z. B. das Speichern von Protokollen, das Markieren des Datenzustands usw.:
function safeXmlParse($xmlString) {
$parser = xml_parser_create();
if (!xml_parse($parser, $xmlString, true)) {
$error = xml_error_string(xml_get_error_code($parser));
$line = xml_get_current_line_number($parser);
error_log("XMLAnalyse fehlgeschlagen: $error at line $line");
// Optional:Benachrichtigen Sie den Administrator oder überspringen Sie den Datensatz
return false;
}
xml_parser_free($parser);
return true;
}
Angenommen, Sie erhalten XML -Daten von einer URL https://api.m66.net/feed :
$url = "https://api.m66.net/feed";
$xmlData = file_get_contents($url);
$xmlData = sanitizeXml($xmlData);
if (!safeXmlParse($xmlData)) {
echo "Dies kann nicht analysiert werden XML Daten,Fehler protokolliert。\n";
} else {
echo "XML Erfolgreiche Analyse!\n";
}
Für besonders verwirrende XML können Sie externe Werkzeuge wie Tidy , Xmllint oder Pythons wunderschöne Gruppe verwenden, um es zur Verarbeitung zu beseitigen und dann in PHP zu importieren.
Der Schlüssel zum Umgang mit XML -Parsenfehlern liegt in der Vorverarbeitung + Fehlertoleranz + Fehlertoleranz -Wiederherstellungsmechanismus. Obwohl XML_PARSE () eine grundlegende, aber strenge XML -Parsing -Methode ist, kann es die Kompatibilität von unregelmäßigem XML mit DOM, libxML, manuellen Reparaturstrategien und anderen Methoden erheblich verbessern.
Wenn Sie das nächste Mal mit "mysteriöser XML -Parsen -Misserfolg" konfrontiert sind, können Sie diese Methoden genauso gut versuchen!
Verwandte Tags:
xml_parse