我正在将符合XML的PHP文件加载到DOMDocument中。
$domDoc = new DOMDocument();
$domDoc->recover = TRUE;
$domDoc->preserveWhiteSpace = TRUE;
$domDoc->formatOutput = FALSE;
$domDoc->substituteEntities = FALSE;
$domDoc->resolveExternals = FALSE;
尽管保留了空格并指示它不对输出进行格式化,但我仍然发现在使用<?php ?>
保存XML时$domDoc->saveXML()
块中的前导空格已被删除。
输入:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<?php
// This is code.
// Something else.
echo 'test';
?>
</html>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<?php // This is code.
// Something else.
echo 'test';
?>
</html>
我希望输出尽可能与输入完全相同。折叠属性之间的空白是可以接受的,但是在节点之间或处理指令内折叠空格是不可行的。为什么PHP :: DOMDocument()/ libxml2会更改PI的内容?我是否需要使用手动DOM回显来保持完全保留的空白?
答案 0 :(得分:2)
PI节点中的领先空白实际上可以崩溃,因为the DOM considers the data portion of a processing instruction to be:
此处理指令的内容。这是从目标之后的第一个非空格字符到紧接在?&gt;之前的字符。
(强调我的。)
preserveWhiteSpace
设置仅适用于文本节点,这就是为什么这对您没有帮助。
在任何情况下,我都建议不要依赖嵌入式PHP作为处理指令,因为PHP中可以包含?>
(例如作为字符串文字的一部分),它会提前终止处理指令。 / p>