Viele Entwickler stoßen auf ein häufiges Problem, wenn XML -Daten mithilfe von PHP -Funktion xml_parse () analysiert werden: Der Fehler "XML -Analyse fehlgeschlagen". Diese Art von Fehler tritt häufig verwirrend auf, insbesondere wenn es um scheinbar gut geformte XML-Inhalte geht. Dieser Artikel wird die Ursachen dieses Problems eingehend analysieren und mehrere wirksame Lösungen liefern.
xml_parse () ist Teil der XML-Parser-Erweiterung in PHP und basiert auf der Expat XML-Parser-Bibliothek für ereignisgesteuerte Parsen. Es ist erforderlich, dass der Eingangs -XML mit dem XML -Standard vollständig konform sein muss, da ansonsten ein Parsing -Fehler geworfen wird.
Die Syntax ist wie folgt:
bool xml_parse(resource $parser, string $data, bool $is_final)
Parameterbeschreibung:
$ parser : Eine von xml_parser_create () erstellte Parser -Ressource.
$ Daten : XML -Daten zu analysieren.
$ is_final : Gibt an, ob es sich um das letzte Datenteil handelt.
Das häufigste Problem ist, dass das XML selbst ein falsches Format ist. Zum Beispiel:
Etikett nicht geschlossen
Es wurden illegale Charaktere verwendet (wie & wird nicht richtig entkommen, als & amp; )
Der Deklarationsfehler beispielsweise wird die XML -Deklaration nach dem Platz platziert
$xml = '<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don\'t forget me this weekend.</note>';
Im obigen Beispiel führt das fehlende </body> -Tag zu, dass das Parsen fehlschlägt.
Wenn die XML-Deklaration UTF-8 verwendet, aber nicht-UTF-8-codierte Zeichen im tatsächlichen Inhalt enthält, wird auch die Parsen fehlgeschlagen.
<?xml version="1.0" encoding="UTF-8"?>
Ein Fehler tritt auch auf, wenn der Inhalt von GBK-kodierte Zeichen enthält, jedoch angibt, dass sie UTF-8 sind.
Wenn Sie XML -Inhalte über eine URL oder Datei lesen, schlägt der Lesen fehl, oder es werden nur teilweise Daten gelesen, dadurch wird auch das Parsen -Fehler verursacht.
$url = 'https://m66.net/data/feed.xml';
$xmlData = file_get_contents($url);
if ($xmlData === false) {
die("Lesen XML scheitern");
}
Wenn Sie große XML in Segmenten lesen, sollte der dritte Parameter $ is_final von xml_parse () beim letzten Anruf auf TRUE eingestellt werden. Wenn nicht festgelegt, führt dies zu einem Fehler "Auflösung nicht abgeschlossen".
Diese Funktionen können Ihnen helfen, die spezifischen Ursachen für Parsenfehler zu lokalisieren:
$parser = xml_parser_create();
if (!xml_parse($parser, $xml, true)) {
$errorCode = xml_get_error_code($parser);
$errorMessage = xml_error_string($errorCode);
$line = xml_get_current_line_number($parser);
$column = xml_get_current_column_number($parser);
echo "XML parsing failed: $errorMessage at line $line, column $column";
}
xml_parser_free($parser);
Es wird empfohlen, Redakteure zu verwenden , die die XML-Überprüfung (z.
Stellen Sie immer sicher, dass die Codierung in der XML -Deklaration mit der tatsächlichen Codierung übereinstimmt. Die UTF-8-Codierung wird empfohlen und beim Speichern von Dateien explizit festgelegt.
Wenn es sich bei der XML -Quelle um eine Remote -URL handelt, wird empfohlen, zu überprüfen, ob die Anfrage zuerst erfolgreich ist, und dann analysieren:
$url = 'https://m66.net/api/xml';
$xml = @file_get_contents($url);
if ($xml === false) {
die("Fernbedienung nicht erhalten XML Daten");
}
Im Vergleich zum ursprünglichen XML_PARSE () bietet PHP eine modernere und einfachere XML -Parsing -Methode, wie z. B. simplexml:
$xml = simplexml_load_string($xmlData);
if ($xml === false) {
echo "SimpleXML 解析scheitern";
}
Oder domdocument verwenden:
$dom = new DOMDocument();
$success = $dom->loadXML($xmlData);
if (!$success) {
echo "DOMDocument 解析scheitern";
}
Beide Methoden bieten freundlichere Fehleraufforderungen und erleichtern es einfacher, XML -Knoten zu bedienen.
Obwohl der Fehler "XML Parsing fehlgeschlagen" häufig ist, können die Gründe dafür häufig durch systematische Inspektionen eindeutig überprüft werden. Das Verständnis und die Befolgung von XML -Formatspezifikationen und die Verwendung von Codierung und Tools rational werden die Erfolgsrate an der Parsing erheblich verbessern. Wenn Sie die Verwendung modernerer XML -Parsing -Tools weiter in Betracht ziehen, kann der Entwicklungsprozess auch effizienter und stabiler werden.
Wenn Sie sich häufig mit Remote -XML -Schnittstellen befassen, können Sie die obige Erkennungslogik genauso gut in Funktionen einbeziehen und sie im Projekt wiederverwenden, um die Robustheit zu verbessern.