Я загружаю 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, повторяющемуся, чтобы сохранить пробелы полностью сохранились?
Ведущий пробел в узле PI является на самом деле все в порядке, как рухнуть, как DOM считает часть данных инструкции обработки:
Содержание этой инструкции по обработке. Это от первого непробельного символа после цели персонажу, непосредственно предшествующему?>.
(Акцент мой.)
preserveWhiteSpace
настройка применяется только к текстовым узлам, поэтому здесь это не поможет.
В любом случае я бы посоветовал не полагаться на встроенный PHP, который будет рассматриваться как инструкция обработки, поскольку PHP может содержать ?>
внутри него (например, как часть строкового литерала), который досрочно завершит инструкцию обработки.
Других решений пока нет …