PHP Doku:: Behandlung von XML-Fehlern - simplexml.examples-errors.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzXML-ManipulationSimpleXMLBeispieleBehandlung von XML-Fehlern

Ein Service von Reinhard Neidl - Webprogrammierung.

Beispiele

<<Einfache Anwendung

The SimpleXMLElement class>>

Behandlung von XML-Fehlern

Die Behandlung von XML-Fehlern beim Laden von Dokumenten ist eine sehr einfache Sache. Durch die Verwendung der libxml-Funktionalität ist es möglich, alle XML-Fehlermeldungen beim Laden des Dokuments zu unterdrücken und danach über die aufgetretenen Meldungen zu iterieren.

Das libXMLError-Objekt, das von libxml_get_errors() zurückgegeben wird, hat verschiedene Eigenschaften. Dazu gehören message, line und column (Position) des jeweiligen Fehlers.

Beispiel #1 Laden eines defekten XML-Strings

<?php
libxml_use_internal_errors
(true);
$sxe simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if (!
$sxe) {
    echo 
"Laden des XML fehlgeschlagen\n";
    foreach(
libxml_get_errors() as $error) {
        echo 
"\t"$error->message;
    }
}

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Laden des XML fehlgeschlagen
	Blank needed here
	parsing XML declaration: '?>' expected
	Opening and ending tag mismatch: xml line 1 and broken
	Premature end of data in tag broken line 1


2 BenutzerBeiträge:
- Beiträge aktualisieren...
openbip at gmail dot com
26.02.2010 5:20
Note that "if (! $sxe) {" may give you a false-negative if the XML document was empty (e.g. "<root />").  In that case, $sxe will be:

object(SimpleXMLElement)#1 (0) {
}

which will evaluate to false, even though nothing technically went wrong.

Consider instead: "if ($sxe === false) {"
Jacob Tabak
15.02.2010 22:17
If you are trying to load an XML string with some escaped and some unescaped ampersands, you can pre-parse the string to ecsape the unescaped ampersands without modifying the already escaped ones:
<?php
$s
= preg_replace('/&[^; ]{0,6}.?/e', "((substr('\\0',-1) == ';') ? '\\0' : '&amp;'.substr('\\0',1))", $s);
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)