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) {"Основна употреба на SimpleXML
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Основна употреба на SimpleXML
Референца за `simplexml.examples-errors.php` со подобрена типографија и навигација.
Основна употреба на SimpleXML
Справувањето со XML грешки при вчитување документи е многу едноставна задача. Користејќи ја libxml функционалноста можно е да се потиснат сите XML грешки при вчитување на документот и потоа да се итерира преку грешките.
На LibXMLError објектот, вратен од libxml_get_errors(), содржи неколку својства вклучувајќи го и message, line and column (позиција) на грешката.
Пример #1 Вчитување на оштетен XML стринг
<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if ($sxe === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Failed loading XML
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
Белешки од корисници 3 белешки
If you need to process the content of your broken XML-doc you might find this interesting. It has blown past a few simple corruptions for me.
http://php.net/manual/en/class.domdocument.php#domdocument.props.recoverNow that the /e modifier is considered deprecated in preg_replace, you can use a negative lookahead to replace unescaped ampersands with & without throwing warnings:
$str = preg_replace('/&(?!;{6})/', '&', $str);
You probably should have been doing this before /e was deprecated, actually.