Чего вы пытаетесь достичь?
Устанавливая preserveWhiteSpace
в true
(ненужно; это по умолчанию), вы говорите libxml не игнорировать текстовые узлы, состоящие только из пробелов.Тем не менее, в то же время, вы пытаетесь отформатировать XML-файл, который, чтобы быть действительно красивым, требует узлов с пробелами.
Затем, даже игнорируя пробел, вы должны реализовать пробел внутри <seg>
теги значимы;libxml не удалит их;если вы заставите разрыв строки после text 1
, на следующей строке закрывающий тег </seg>
не должен иметь отступ, иначе содержимое текстового узла внутри тега будет отличаться.
Ваш код дает мне это:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg> text 2 </seg></body>
Поскольку вы сообщаете libxml, что пробел является значительным, он не может поставить разрыв строки после второго </seg>
, в противном случае это приведет к созданию другого текстового узла.
Если вы скажете $dom->preserveWhiteSpace = false;
:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg> text 2 </seg>
</body>
Теги с отступом, но libxml по-прежнему не может сделать это:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg>
text 2
</seg>
</body>
, поскольку это приведет к изменению содержимого текстовых узлов внутри <seg>
.
Возможно, вы захотите попробовать tidy , хотя я не уверен, что он будет делать то, что вы хотите.