Почему PHP DOMDocument удаляет начальные пробелы из узлов Инструкции обработки? (& lt;? php? & gt;)

Я загружаю 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, повторяющемуся, чтобы сохранить пробелы полностью сохранились?

2

Решение

Ведущий пробел в узле PI является на самом деле все в порядке, как рухнуть, как DOM считает часть данных инструкции обработки:

Содержание этой инструкции по обработке. Это от первого непробельного символа после цели персонажу, непосредственно предшествующему?>.

(Акцент мой.)

preserveWhiteSpace настройка применяется только к текстовым узлам, поэтому здесь это не поможет.

В любом случае я бы посоветовал не полагаться на встроенный PHP, который будет рассматриваться как инструкция обработки, поскольку PHP может содержать ?> внутри него (например, как часть строкового литерала), который досрочно завершит инструкцию обработки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]