如何修改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
相关产品推荐
相关产品推荐

