Bei der Verarbeitung von XML -Daten in PHP ist XML_PARSE () eine häufige Funktion, mit der wir XML -Daten in strukturierte Informationen analysieren können. Wenn diese Funktion jedoch mit einigen unregelmäßigen, falschen Format- oder nicht -nicht -XML -Daten konfrontiert ist, kann diese Funktion jedoch leicht Fehler werfen, wodurch das gesamte Programm unterbrochen oder Ausnahmen ausgegeben werden.
Wie können wir also vermeiden, dass wir bei der Verwendung von XML_Parse () Fehler analysieren, insbesondere wenn wir unregelmäßige XML begegnen? Hier sind einige praktische Tipps und Codebeispiele.
Bevor Sie XML_PARSE () verwenden, wird empfohlen, immer die Fehlererkennung zu aktivieren, damit bestimmte Fehlerinformationen beim Ausfall des Parsens erfasst werden, anstatt das Programm lautlos ausfällt zu lassen.
$xml = '<root><item>Daten1<item><item>Daten2</item></root>'; // irregulärXML
$parser = xml_parser_create();
xml_set_error_code($parser, XML_ERROR_NONE);
if (!xml_parse($parser, $xml, true)) {
$errorCode = xml_get_error_code($parser);
$errorMsg = xml_error_string($errorCode);
$line = xml_get_current_line_number($parser);
$column = xml_get_current_column_number($parser);
echo "Parsing -Fehler:$errorMsg Im $line OK,1. $column Liste\n";
}
xml_parser_free($parser);
Um unregelmäßige XML sicherer zu analysieren, können wir den Fehler-toleranten Modus von libxml verwenden, um die Daten vorzubereiten, und dann an Funktionen wie XML_PARSE () oder SimplexML_Load_string () übergeben, um zu verarbeiten.
libxml_use_internal_errors(true);
$xml = '<root><item>Daten1<item><item>Daten2</item></root>';
$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_NONET | LIBXML_COMPACT | LIBXML_NOCDATA);
if (!$dom) {
foreach (libxml_get_errors() as $error) {
echo "LibXML Fehler:{$error->message}\n";
}
libxml_clear_errors();
} else {
echo "XML Erfolgreich Laden,Kann weiter analysieren。\n";
}
Manchmal ist die Datenquelle instabil, z . In diesem Fall können wir zunächst häufig häufige Probleme wie nicht abgestimmte Tags oder illegale Zeichen mit regelmäßigen oder manuellen Methoden beheben.
$xml = file_get_contents('http://api.m66.net/data.xml');
// Einfache Lösung:Ersetzen Sie nicht abgesetzte Tags
$xml = preg_replace('/<item>([^<]*)<item>/', '<item>$1</item><item>', $xml);
// 然后再进OK解析
$parser = xml_parser_create();
if (!xml_parse($parser, $xml, true)) {
echo "Existiert immer noch XML Fehler,Versuchen Sie andere Möglichkeiten, damit umzugehen。\n";
}
xml_parser_free($parser);
? Hinweis: Diese Methode eignet sich für Szenarien, in denen das Format erwartet wird, und es wird nicht empfohlen, regelmäßige harte Korrekturen für komplexe strukturelle XML zu verwenden.
Manchmal ist das Ändern eines Werkzeugs stabiler. Beispielsweise hat Simplexml eine stärkere Fehlertoleranz und einen leichteren Code, um zu warten.
$xml = file_get_contents('http://api.m66.net/data.xml');
libxml_use_internal_errors(true);
$simpleXml = simplexml_load_string($xml);
if ($simpleXml === false) {
echo "SimpleXML Analyse fehlgeschlagen,Fehler如下:\n";
foreach (libxml_get_errors() as $error) {
echo $error->message;
}
} else {
echo "SimpleXML Erfolgreiche Analyse!\n";
}
Best Practices für unregelmäßige XML bei Verwendung von xml_parse () :
Aktivieren Sie die Fehlerberichterstattung, um die Lokalisierungsprobleme zu erleichtern.
Verwenden Sie libxML fehlertolerante Parsen als Vorverarbeitung;
Verwenden Sie regelmäßig oder domdokument, um XML bei Bedarf zu beheben.
Wenn das Datenformat unkontrollierbar ist, verwenden Sie Parser wie simplexml bessere Fehlertoleranz.
Erst nachdem sichergestellt wurde, dass das XML -Format angemessen ist und die Verwendung von XML_PARSE () der Code verbessert und die Fehlertoleranz aufgrund von Formatproblemen vom Ablösen des gesamten Dienstes vermieden wird.
Ich hoffe, diese Tipps können Ihnen helfen, alle Arten von "kniffligen" XML -Daten zu verarbeiten! Wenn Sie auf bestimmte Parsenfehler stoßen, können Sie XML -Inhalte veröffentlichen, und ich kann sie auch für Sie analysieren ~