DomDocument的loadXML方法为何无法正常工作?
问题分析与修复
首先,你的代码里有两个关键问题导致格式化后的XML没有正确输出:
- 错误使用
saveXML()方法:你现在是把未定义的$xmlContentFormatted作为参数传给saveXML(),但实际上saveXML()的返回值才是格式化后的XML字符串,你需要把它赋值给变量。 - 变量未初始化:
$xmlContentFormatted在使用前没有定义,直接echo会导致输出空内容。
另外,print_r($result)输出1是正常的——因为loadXML()成功加载XML时会返回布尔值true,在PHP中直接输出true就会显示1;print_r($errors)输出空数组说明XML没有语法错误,这部分是没问题的。
修正后的代码
<?php $xml = <<<XML <?xml version="1.0"?> <Contact> <Name>Foo Bar</Name> <Numbers> <Number>9876543210</Number> <Number>9876543212</Number> </Numbers> <Address> <Premise>11</Premise> <Postcode>ZZ99 9ZZ</Postcode> </Address> </Contact> XML; $dom = new domDocument( '1.0', 'utf-8' ); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->recover = true; libxml_use_internal_errors(true); $result = $dom->loadXML($xml); // 换成更直观的加载状态提示 echo "XML加载状态:" . ($result ? "成功" : "失败") . "<br>"; $errors = libxml_get_errors(); if (!empty($errors)) { echo "XML语法错误:<br>"; print_r($errors); } else { echo "无XML语法错误<br>"; } // 正确获取格式化后的XML字符串 $xmlContentFormatted = $dom->saveXML(); echo "<pre lang=xml>"; echo htmlspecialchars($xmlContentFormatted); // 避免XML标签被浏览器当作HTML解析 echo "</pre><br><br>"; ?>
额外优化说明
- 把
print_r($result)改成了可读性更强的状态提示,你可以根据需求调整显示内容。 - 增加
htmlspecialchars()包裹XML输出,这样浏览器会完整显示XML标签,而不是解析它们。 - 给错误输出加了判断逻辑,只有存在错误时才展示,让整体输出更整洁。
现在运行修正后的代码,你就能看到格式化后的XML内容了。
内容的提问来源于stack exchange,提问作者Nick Weavers
相关产品推荐
相关产品推荐

