請注意,如果 XML 文件為空(例如 "<root />"),則「if (! $sxe) {」可能會給您錯誤的否定結果。在這種情況下,$sxe 將會是
object(SimpleXMLElement)#1 (0) {
}
這會評估為 false,即使技術上沒有任何錯誤發生。
請改為考慮:「if ($sxe === false) {」
在載入文件時處理 XML 錯誤是非常簡單的任務。使用libxml功能,可以在載入文件時抑制所有 XML 錯誤,然後遍歷這些錯誤。
由libxml_get_errors()傳回的libXMLError物件包含數個屬性,包括錯誤的message、line和column(位置)。
範例 #1 載入損壞的 XML 字串
<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if ($sxe === false) {
echo "載入 XML 失敗\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
以上範例將會輸出
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
請注意,如果 XML 文件為空(例如 "<root />"),則「if (! $sxe) {」可能會給您錯誤的否定結果。在這種情況下,$sxe 將會是
object(SimpleXMLElement)#1 (0) {
}
這會評估為 false,即使技術上沒有任何錯誤發生。
請改為考慮:「if ($sxe === false) {」
如果您需要處理損壞的 XML 文件的內容,您可能會發現這很有趣。它已經通過了一些簡單的損壞情況。
https://php.dev.org.tw/manual/en/class.domdocument.php#domdocument.props.recover