[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: XML Writer
Aspire89
В php полный ноль, а нужен простой скрипт.

Есть запрос серверу в ввиде: http://site.ru/page.php?lat=123&lng=456

Задача добавить значения lat и lng в xml файл, структура файла:
Код

<markers>
<marker lat="58.051750" lng="56.214144"/>
<marker lat="58.054237" lng="56.223993"/>
</markers>


Немного почитал и написал:
PHP
<?php
$writer 
= new XMLWriter();
$writer->openURI('article.xml');
$writer->startElement("markers");
$writer->startElement("marker");
$writer->writeAttribute("lat"$_REQUEST["lat"]);
$writer->writeAttribute("lng"$_REQUEST["lng"]);
$writer->endDocument();
$writer->flush();
print 
$_REQUEST["lat"];

но lat и lng пустые и при новом запросе старый затирается. Помогите пожалуйста.



Спустя 1 час, 23 минуты, 53 секунды (9.06.2009 - 22:03) waldicom написал(а):
А почему бы просто не записать в файл с помощью fwrite?

Спустя 16 минут, 45 секунд (9.06.2009 - 22:19) Aspire89 написал(а):
можно и с помощью fwrite, но только добавлять то нужно не в конец файла, а на строчку count-1, и научите пожалуйста обрабатывать запрос ?lat=123&lng=456

Спустя 10 минут, 12 секунд (9.06.2009 - 22:30) waldicom написал(а):
PHP
.....
fwirte($fd, '<markers>');
fwirte($fd, '<marker lat="' . $_GET['lat'] . '" lng="' . $_GET['lng'] . '"/>');
fwirte($fd, '<marker lat="' . $_GET['lat'] . '" lng="' . $_GET['lng'] . '"/>');
fwirte($fd, '<markers>');
.....

Если lat и lng как-то надо конвертировать перед записью, то конвертируем.

Спустя 8 минут, 22 секунды (9.06.2009 - 22:38) Aspire89 написал(а):
у меня будет приложение - клиент на кпк, которое через определенный момент будет отправлять запрос на сервер с координатами, если записывать в конец файла то ветвь <markers> не будет закрыта, а как реализовать, чтобы запись производилась на последнюю строчку и после неё добавлялось fwirte($fd, '</markers>'); ?

Спустя 9 часов, 9 минут, 28 секунд (10.06.2009 - 07:47) gletscherl написал(а):
PHP
$fd=fopen('xml-файл', "a+");
str_replace('</markers>', "", $fd);
fwirte($fd, '<marker lat="' . $_GET['lat'] . '" lng="' . $_GET['lng'] . '"/>');
fwirte($fd, '<marker lat="' . $_GET['lat'] . '" lng="' . $_GET['lng'] . '"/>');
fwirte($fd, '</markers>');

тоесть при открытии файла будет удалятся элемент </markers> далее пишутся новые строки и потом </markers> снова добавляется.
НО это при условии, что у тебя всего 1 тег </markers>

Спустя 30 минут, 47 секунд (10.06.2009 - 08:18) sergeiss написал(а):
Цитата (Aspire89 @ 9.06.2009 - 23:19)
научите пожалуйста обрабатывать запрос ?lat=123&lng=456

Это получение параметров через глобальный массив $_GET. В коде пишешь так:
PHP
$latitude=$_GET['lat'];
$longitude=$_GET['lng'];

Но учти, что это получение данных без защиты.

Спустя 9 минут, 37 секунд (10.06.2009 - 08:28) glock18 написал(а):
PHP
$fd=fopen('xml-файл'"a+");
str_replace('</markers>'""$fd);


У тебя это работает? Насколько я помню, fopen возвращает id потока с файлом (тип resource), а str_replace должен получить строку в качестве 3 параметра.

Спустя 11 минут, 43 секунды (10.06.2009 - 08:40) gletscherl написал(а):
Цитата (glock18 @ 10.06.2009 - 05:28)
PHP
$fd=fopen('xml-файл', "a+");
str_replace('</markers>', "", $fd);


У тебя это работает? Насколько я помню, fopen возвращает id потока с файлом (тип resource), а str_replace должен получить строку в качестве 3 параметра.

а если считать файл в переменную через file_get_contents, заменить что надо, а потом записать эту переменную в файл через "w+"?

Спустя 27 минут, 47 секунд (10.06.2009 - 09:07) glock18 написал(а):
тогда должно работать, насколько я тебя понял.

Спустя 10 часов, 5 минут, 37 секунд (10.06.2009 - 19:13) Aspire89 написал(а):
всем помогающим большое спасибо, почти уже то что надо, но есть небольшой косяк.
исходный xml файл:
Код
<markers>
<marker lat="330" lng="220"/>
<marker lat="1" lng="2"/>
</markers>

после добавления:
Код
<markers>
<marker lat="330" lng="220"/>
<marker lat="1" lng="2"/>
</markers><marker lat="5" lng="7"/>
</markers>

сам скрипт:
PHP
<?
$fd=fopen('data.xml'"a+");
str_replace("</markers>"""$fd);
fwrite($fd'<marker lat="' $_GET['lat'] . '" lng="' $_GET['lng'] . '"/>');
fwrite($fd"\n");
fwrite($fd'</markers>');
fclose($fd);

т.е. при открытии указатель помещается в конец файла и строчка
PHP
str_replace("</markers>"""$fd);

не срабатывает. Даже не представляю как еще можно заменить последнюю строчку.

Спустя 22 минуты, 26 секунд (10.06.2009 - 19:35) Aspire89 написал(а):
gletscherl, спасибо за помощь, сначала не заметил Ваш пост, но потом сделал как Вы написали и все работает smile.gif
PHP
$data=file_get_contents('data.xml');
$data=str_replace("</markers>", "", $data);

$fd=fopen('data.xml', "w+");

fwrite($fd, $data);
fwrite($fd, '<marker lat="' . $_GET['lat'] . '" lng="' . $_GET['lng'] . '"/>');
fwrite($fd, "\n");
fwrite($fd, '</markers>');
fclose($fd);


В общем вот что у меня получилось http://tinyurl.com/m5ljkb
Быстрый ответ:

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