Форматирование вывода XML в печатном XML-файле с помощью PHP

Я пытаюсь вывести xml-файл в свою корневую папку. Файл создается, но все элементы и их содержимое сохраняются в одну прямую вот так:

*<?xml version="1.0" encoding="UTF-8"?> <letterA>   <lemma>    <word>word1</word>      <textfiles>title of file</textfiles> <videofiles>video.mp3</videofiles>  </lemma>

* Но я хочу что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?>
<letterA>
  <lemma>
    <word>song1.mp3</word>
    <textfiles>title of file</textfiles>
    <videofiles>video.mp3</videofiles>
  </lemma>
</letterA>

Вот мой код:

<?php    
/* create a dom document with encoding utf8 */
$domtree = new DOMDocument('1.0', 'UTF-8');
$domtree->preserveWhiteSpace = true; 
$domtree->setIndent = (1);

   /* $domtree->formatOutput = (true); */

/* create the root element of the xml tree */
$letterARoot = $domtree->createElement("letterA");
/* append it to the document created */
$letterARoot = $domtree->appendChild($letterARoot);

$alemma = $domtree->createElement("lemma");
$alemma = $letterARoot->appendChild($alemma);

/* you should enclose the following two lines in a cicle */
$alemma->appendChild($domtree->createElement('word','word1));
$alemma->appendChild($domtree->createElement('textfiles','title of file'));
$alemma->appendChild($domtree->createElement('videofiles','video.mp3'));

/* save the file in my root folder */
$domtree->save("firstFile.xml") or die("Error"); 

/* get the xml printed */
/* echo $domtree->saveXML(); */
?>

Я был бы признателен, если бы кто-то мог помочь. Как видите, я использовал «preserveWhiteSpace» с «setIndent», но это не помогло. Я также попытался снова использовать «formatOutput». Меня беспокоит не внешний вид моего xml в браузере, а его внешний вид в реальном файле (а именно, firstFile.xml в моем примере выше). Спасибо заранее.


person entropy    schedule 09.03.2013    source источник
comment
Почему вы беспокоитесь о красивом отступе XML? Любой может использовать подходящую программу чтения XML для форматирования XML в красивый узел иерархии.   -  person ajreal    schedule 10.03.2013
comment
$domtree->setIndent ложь. Вы просто добавляете в класс общедоступное свойство, которое просто несет значение. Если вы хотите изменить отступ, вы можете сделать это с регулярным выражением, как описано здесь: Преобразование отступа с помощью preg_replace (без обратного вызова)   -  person hakre    schedule 10.03.2013
comment
спасибо @harke, я читал этот пост раньше, но опять же, это работает на уровне браузера, но не в моем реальном xml-файле ..   -  person entropy    schedule 10.03.2013
comment
просто прочитайте ваш второй комментарий, так что вы говорите, что нет способа отформатировать мой файл в момент его создания, и я должен позже обработать свой файл с помощью регулярного выражения. Я прав?   -  person entropy    schedule 10.03.2013
comment
@entropy: Что касается изменения символов, используемых для отступа, то да. Форматирование XML с отступами в два пробела на каждом уровне выполняется DomDocument (как указано в повторяющемся вопросе).   -  person hakre    schedule 11.03.2013


Ответы (1)


Вы должны добавить

$domtree->formatOutput = true;

если вы хотите, чтобы это было красиво напечатано. Подробнее см. formatOutput.

В одном из комментариев (Иохем Блок) предлагается чтобы выключить preserveWhiteSpace

$domtree->preserveWhiteSpace = false;
person Olaf Dietsche    schedule 09.03.2013
comment
спасибо, но я пробовал все это, и это отлично работает в браузере, но не в моем сохраненном файле ... Есть другие идеи? - person entropy; 10.03.2013
comment
@энтропия Нет, извини. Я протестировал ваш скрипт, и добавление formatOutput = true решило проблему на моем компьютере. - person Olaf Dietsche; 11.03.2013