2009-06-19 4 views
2

Ich erstelle ein Webformular, in dem Administratoren auf meiner Site XML zu einem Textbereich hinzufügen und in einer Datenbanktabelle speichern können, aber ich bin ein wenig verwirrt, was die beste Methode zum Parsen des XML betrifft.Wie kann ich detaillierte Fehlerinformationen beim Analysieren von XML erhalten, während das DOM beibehalten wird?

Das PHP-Skript muss das XML analysieren, und wenn es Parsing-Fehler gibt, sollte es die Fehlermeldung und Zeile/Spalte, wo der Parser stoppte, an den Administrator zurückgeben, der das Formular abgeschickt hat. Nach dem Parsen muss es auf das DOM zugreifen, um mehrere Überprüfungen der Existenz von Knoten und Attributen mit XPath durchzuführen.

Wenn ich xml_create_parser() und xml_parse() verwende, kann ich die detaillierten Fehlerinformationen erhalten, nach denen ich suche, wenn false zurückgegeben wird. Ich kann jedoch nicht auf das DOM des XML zugreifen, nachdem ich es analysiert habe. Wenn ich DOMDocument::loadXML() verwende, was ich gelesen habe, löst es keine Ausnahmen für Parse-Fehler aus, es gibt sie nur in das PHP-Protokoll aus.

Wäre es ein großer Leistungstreffer, wenn ich zuerst xml_parse() versuchte und dann, wenn das erfolgreich ist, DOMDocument::loadXML() ausführen, wenn man bedenkt, dass die Dateien meistens kleiner als 10KB sind und einige wenige 10-20KB groß sind? Kennt jemand einen besseren Weg?

Antwort

6

Sie können libxml_use_internal_errors aktivieren und dann -wenn DOMDocument :: load() mit libxml_get_errors()

<?php 
$xml = '<a> 
    <b>xyz</b> 
    <c> 
</a>'; 

libxml_use_internal_errors(true); 
$doc = new DOMDocument; 
if (!$doc->loadxml($xml)) { 
    $errors = libxml_get_errors(); 
    var_dump($errors); 
}
+0

Dank der detaillierten Fehlermeldungen fehlgeschlagen für abfragen. Immer wenn ich suchte, fand ich nur Leute, die ihre eigenen Fehlerbehandler einstellten, und ich sah keinen Weg, die Zeilen-/Spaltennummern des Fehlers auf diese Weise zu bekommen. –

Verwandte Themen