Форматирование — для чтения
XML приходит из API или выгрузки конфигурации одной строкой, и форма документа не видна. Отступы делают вложенность читаемой: какие элементы соседние, какие дочерние, где расположены атрибуты.
Единственное, что надо знать до переформатирования, — смешанное содержимое. В
словаре, где текст и элементы делят родителя (абзац с <em> внутри), добавленные
пробелы не украшение, а текст. Форматирование такого документа его меняет. Для
XML, описывающего данные, — а это почти весь XML на практике — отступы безопасны.
Что уцелеет
<![CDATA[...]]>— не тронуто, включая пробелы и символы<<!-- комментарии -->— содержимое сохранено<?xml ... ?>и объявления doctype — остаются сверху, без отступа
Короткий текст в одну строку
Элемент, единственный потомок которого — короткий текст, по умолчанию остаётся однострочным: три строки ради слова «Acme» читаются хуже одной. Отключите, если для сравнения версий нужен каждый элемент на своей строке.
Вопросы
Меняет ли форматирование документ?+
В большинстве XML-словарей пробелы между элементами незначимы, поэтому расстановка отступов там безопасна. Но не везде: в документе со смешанным содержимым, где текст и элементы лежат в одном родителе (как в XHTML), добавленные пробелы становятся частью текста. Форматирование нужно для чтения — не коммитьте переформатированный XML туда, где его сравнивают побайтово.
CDATA и комментарии сохраняются?+
Да, оба и побайтово. CDATA существует именно для текста, который нельзя интерпретировать, и переносить в нём отступы означало бы свести на нет его смысл. Комментарии сохраняют содержимое, условные секции не трогаются.
А если документ подписан?+
Не форматируйте его. XML-подпись покрывает каноническую форму документа, и перестановка отступов её ломает. То же касается всего, к чему приложен хеш или дайджест.
Почему в минифицированном выводе остались пробелы?+
Внутри текстового содержимого. Минификация убирает форматирующие пробелы между тегами, а не текст, который написал человек: схлопнуть его — значит изменить данные.