Мое имя Rithy.
Я не знаю, как добавить новую строку прежде, чем добавить новый узел или элемент в xml.
Мой php:
$dom = new DOMDocument();
$dom->formatOutput = true;
$dom->preserveWhiteSpace = true;
$dom->load($xml_file);
$body = $dom->getElementsByTagName('body')->item(0);
$newelement_seg = $dom->createElement('seg');
$data = $dom->createTextNode(" text 2 ");
$newelement_seg->appendChild($data);
$body->appendChild($newelement_seg);
$dom->save($xml_file);
XML Прежде добавляют нового ребенка:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
</body>
</xml>
XML после добавляют нового ребенка:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg>
text 2
</seg>
</body>
</xml>
Но я хочу:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg>
text 2
</seg>
</body>
</xml>
<hr/>
Заранее спасибо!
Чего вы пытаетесь достичь?
Установив для preserveWhiteSpace
значение true
(необязательно; это значение по умолчанию), вы сообщаете libxml не игнорировать текстовые узлы, состоящие только из пробелов. Тем не менее, в то же время вы пытаетесь красиво отформатировать XML-файл, который, чтобы быть действительно красивым, требует узловых пробелов.
Тогда, даже игнорируя пробелы, вы должны понимать, что пробелы внутри тегов
имеют значение; libxml их не удалит; если вы принудительно переводите строку после текст 1
, в следующей строке закрывающий тег
не должен иметь отступа, иначе содержимое текстового узла внутри тега будет отличаться .
Ваш код дает мне следующее:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<seg>
text 1
</seg>
<seg> text 2 </seg></body>
Поскольку вы сообщаете libxml, что пробелы важны, он не может помещать разрыв строки после второго
, иначе будет создан другой текстовый узел.
Если вы скажете $ 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>
потому что это изменит содержимое текстовых узлов внутри
.
Вы можете попробовать приборку , хотя я не уверен, что она поможет вам.