Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Добраться до нужной строки в XML


Автор: Alexblbl 7.9.2011, 13:14
Скажу сразу я новичок в php, а если быть точнее то вчера стала проблема админ части на php. Необходимо что то записывать на сервер. В общем с перезаписью файлов путем fputs и w я разобрался там всё просто. 

Но вот нужно Дописывать новости в определенную строку, постоянно то есть есть xml:
Код

<?xml version="1.0" encoding="utf-8"?>
 <news>
   <item>
     <title>Новые поступления</title>
     <text>
     This program is free software;
     </text>
     <date>13:30 - 12.08.2004</date>
   </item>
   <item>
     <title>ATATA поступления</title>
     <text>
     asdsad sad as dsa asd asdsa as das
     </text>
     <date>11:30 - 12.08.2004</date>
   </item>
   <item>
     <title>ERERER поступления</title>
     <text>
     p pppppppppppppppp p p pp  p pppppppppppppppppp pppppppppppppppppppppp
     </text>
     <date>18:30 - 12.08.2004</date>
   </item>
 </news>


Тут вообще всё очень просто! Нужно всего лишь, после строки <news> дописывать новый <item>...</item> и всё. Как это сделать ?

<item> я генерирую этой функцией:
Код

$file = fopen("news.xml","r+");
    if(!$file)
    {
      echo("Ошибка открытия файла");
    }
    else
    {
        $text1 = "$text";
        $title = "$h1";
        $date = "$dates";

        $all = '<?xml version="1.0" encoding="utf-8"?><news><item><title>'.$title.'</title><text>'.$text1.'</text><date>'.$date.'</date></item>';
        $buff = fputs ($file, $all);
        print $buff;


Помогите пожалуйста!

Автор: CruorVult 7.9.2011, 13:24
Выбирайте любой удобный для вас метод парсинга XML
http://www.php.net/manual/en/refs.xml.php

Автор: Alexblbl 7.9.2011, 13:33
Цитата(CruorVult @ 7.9.2011,  13:24)
Выбирайте любой удобный для вас метод парсинга XML
http://www.php.net/manual/en/refs.xml.php

Я вчера начал "учить" php.

Можно обойтись без парсинга?

Эмм дело в том, что я встречал такую функцию как fseek может быть есть функция, которая работает точно также, только не заменяя символы?

Автор: CruorVult 7.9.2011, 14:21
Без парсинга тут никак. Вам нужно вставить item внутри news. Если делать это вручную - то довольно напряжно, лучше использовать готовые методы работы с XML.

Автор: Alexblbl 7.9.2011, 15:09
Цитата(CruorVult @ 7.9.2011,  14:21)
Без парсинга тут никак. Вам нужно вставить item внутри news. Если делать это вручную - то довольно напряжно, лучше использовать готовые методы работы с XML.

Ок. Тогда можете подкинуть примерчик пожалуйста? Что бы было понятно хоть немного .... пожалуйста

Автор: CruorVult 7.9.2011, 15:51
Код

$doc = new DOMDocument();
$doc->load($xml);

$item = $doc->createElement('item');
$news = $doc>getElementsByTagName('news')->item(0);
$news->appendChild($item);
$doc->save($xml);

Автор: Alexblbl 8.9.2011, 10:51
Цитата(CruorVult @ 7.9.2011,  15:51)
Код

$doc = new DOMDocument();
$doc->load($xml);

$item = $doc->createElement('item');
$news = $doc>getElementsByTagName('news')->item(0);
$news->appendChild($item);
$doc->save($xml);

Спасибо.

Но я нашел решение, как и говорил без парсера. Гораздо удобнее для таких задач.

Вот пример если кому надо:
Код

        $file = fopen("../news.xml","r");
    fseek($file, 47, SEEK_SET);
    $other = fread($file, 900000);
    fseek($file, 0, SEEK_SET);
    $prev = fread($file, 47);
    fclose($file);
    $file = fopen("../news.xml","w");

...

        $text1 = "$text";
    $title = "$h1";
    $date = "$dates";
    echo $other;
    $all = $prev.'<item><title>'.$title.'</title><text>'.$text1.'</text><date>'.$date.'</date></item>'.$other;
    $buff = fputs ($file, $all);
    print $buff;



Автор: CruorVult 8.9.2011, 11:46
Alexblbl, это не совсем хорошое решение. Вдруг кто-то вручную изменит файл, поставит ентер вначале, тогда ваш код станет не валидным и прийдется переписывать, выставлять другое смещение.

Автор: Alexblbl 8.9.2011, 13:43
Цитата(CruorVult @ 8.9.2011,  11:46)
Alexblbl, это не совсем хорошое решение. Вдруг кто-то вручную изменит файл, поставит ентер вначале, тогда ваш код станет не валидным и прийдется переписывать, выставлять другое смещение.

Согласен, но:

Это был заказ на админ часть на сайте. 

За рулем будет сидеть блондинко. 

Так, что вероятность изменений XML маловероятны.

Автор: MoLeX 9.9.2011, 05:49
ох зря ты так. зайдет одним темным вечерком сисадмин и подправит что-нибудь в xml'ке и все

Добавлено через 22 секунды

Автор: Alexblbl 9.9.2011, 17:50
Цитата(MoLeX @ 9.9.2011,  05:49)
ох зря ты так. зайдет одним темным вечерком сисадмин и подправит что-нибудь в xml'ке и все

Добавлено @ 05:49

Какой то страшный темный Админ ))) И кстати сегодня сдавали проект - блондинка ликовала "Как всё просто только одна кнопочка и всё так удобно!". Так что результат на лицо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)