[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: XML проблема записи файла.
print_f
Здравствуйте.
Необходимо организовать файл с логами для сайта. Клиент требует что бы формат был .xml
Я начинающий разработчик, много не знаю и всё ещё задаю глупые вопросы, поэтому я здесь.
Логи пишутся корректно, за исключением того, что в одну строку. Заказчик недоволен. Пробовал много разных вариантов, результат один.

Вот пример моего кода добавления строк в .хмл файл:

$date1 = date("d/m/y");
$doc = new DOMDocument();
$doc ->load("log.xml");

$root = $doc->getElementsByTagName('logs')->item(0);
$login = $doc->createElement( "login" );

$date = $doc->createElement('date');
$date->appendChild($doc->createTextNode($date1));

$login->appendChild($date);
$root->appendChild($login);
$doc->save("log.xml");


В качестве примера привёл только добавления текущей даты, дабы не засорять лишним кодом.
А вот изначальный log.xml

<?xml version="1.0"?>
<logs>

</
logs>

<logs> соответсвенно корень, в него записываются все логи.
причём записываются в одну строку. Подскажите пожалуйста, где ошибка или укажите на альтернативное решение, если таковое имеется.
Спасибо.



Спустя 20 часов, 33 минуты, 34 секунды (10.06.2010 - 20:42) print_f написал(а):
неужели никто не знает?

Спустя 40 минут, 5 секунд (10.06.2010 - 21:22) Семён написал(а):
SimpleXML подскажет.

Спустя 3 часа, 26 минут, 23 секунды (11.06.2010 - 00:48) print_f написал(а):
Согласен. Это вариант, всё работает, спасибо. Хотя для такой маленькой задачи весьма нецелесообразно.
Но тем не менее, ведь не может быть, что бы в DOMDocument на пустом месте возник подобный баг. Очень хотелось бы всё же разобраться, найти ошибку и впредь на такой ерунде не просиживать. Если есть какие-то соображения на этот счёт, я буду чертовски признателен.

Спустя 10 дней, 23 часа, 46 минут, 17 секунд (22.06.2010 - 00:34) print_f написал(а):
Нашёл таки!!!
В конец надо было добавить:
$doc ->formatOutput = true;
$in = indent($doc ->saveXML());

$file = fopen("log.xml","w");
fputs($file,$in);
fclose($file);



Ну и сама функция:

function indent($text)
{
$find = array('>', '</', "\n\n");
$replace = array(">\n", "\n</", "\n");
$text = str_replace($find, $replace, $text);
$text = trim($text);

$text_array = explode("\n", $text);
$open_tags = 0;
foreach ($text_array AS $key => $line)
{
if (($key == 0) || ($key == 1))
$tabs = '';
else
{
for ($i = 1; $i <= $open_tags; $i++)
$tabs .= "\t";
}

if ($key != 0)
{
if ((strpos($line, '</') === false) && (strpos($line, '>') !== false))
$open_tags++;
else if ($open_tags > 0)
$open_tags--;
}

$new_array[] = $tabs . $line;

unset($tabs);
}
$indented_text = implode("\n", $new_array);

return $indented_text;
}


Может быть кому-то пригодится.

Спустя 5 минут, 19 секунд (22.06.2010 - 00:40) Nikitian написал(а):
А зачем эти переводы строк? Смотреть xml можно в браузере, а все современные браузеры его отображают красиво, с иерархией.

Спустя 4 минуты, 37 секунд (22.06.2010 - 00:44) print_f написал(а):
Честно говоря, я и сам не понимаю. Но клиент всегда прав и если он хочет, а ещё и платит, то нужно стараться)


_____________
Быдлоскрипт — это скрипт, сделанный быдлокодером «с душою», либо злым кодером с жуткими умыслами.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.