You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:12:14