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

如何修改PHP DOM代码使生成的HTML符合XML规范(输出自闭合<br>)

解决PHP DOM生成XML兼容自闭合<br>标签的问题

你遇到的问题核心在于saveHTML()方法是专门为HTML规范设计的输出工具,HTML允许<br>这类空元素不使用自闭合写法;但XML要求所有空元素必须以自闭合形式呈现(比如<br/>或<br />)。要实现符合XML标准的输出,可以通过以下两种方式修改你的代码:

方法一:改用saveXML()替代saveHTML()

saveXML()会严格遵循XML规范生成输出,自动将空元素处理为自闭合标签。修改后的代码如下:

$document = new \DOMDocument();
$element = $document->createElement('br');
$document->appendChild($element);
$nodes_xml = array();
foreach ($document->childNodes as $node) {
    $nodes_xml[] = $document->saveXML($node); // 替换为XML专用的输出方法
}
$result = implode("\n", $nodes_xml);
echo $result;

运行这段代码会直接输出<br/>,完全符合XML标准要求。

方法二:开启格式化输出优化可读性(可选)

如果需要输出更整洁的格式化XML,可以给DOMDocument开启formatOutput属性,配合saveXML()直接输出整个文档:

$document = new \DOMDocument();
$document->formatOutput = true; // 开启格式化,让标签单独占一行
$element = $document->createElement('br');
$document->appendChild($element);
echo $document->saveXML();

这种方式输出的自闭合标签会单独成行,可读性更强,同样符合XML规范。

原代码为什么不符合要求?

saveHTML()是为HTML场景定制的,HTML5允许<br>、<img>这类空元素省略自闭合符号,所以它会输出<br>而非XML要求的自闭合格式。而saveXML()从设计上就严格遵循XML语法规则,刚好匹配你的需求。

内容的提问来源于stack exchange,提问作者Jay Bienvenu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:24