Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите, пожалуйста, как изменять XML-файл с помощью php
 
 автор: enso   (25.07.2009 в 21:02)   письмо автору
 
 

Приветствую
подскажите, пожалуйста, как быть?

Ситуация:
Есть XML-файл, в котором у тегов несколько атрибутов
типа <item id="24" number="169" status_id="1" valid="true">.
Нужно сделать веб-интерфейс, чтоб выводились все item из XML-файла, а потом
при установке/сбросе галочки соответственно менялся status_id "1" или "2" и перезаписывался в соответствующий item в тот же XML-файл.

Вопрос: Никак не могу разобраться как перезаписать status_id?

  Ответить  
 
 автор: aetern   (25.07.2009 в 21:39)   письмо автору
 
   для: enso   (25.07.2009 в 21:02)
 

Используйте регулярные выражения и замену в строке.
А здесь всегда можно проверить свой вариант, рекомендую http://gskinner.com/RegExr/

  Ответить  
 
 автор: Enso   (25.07.2009 в 22:04)   письмо автору
 
   для: aetern   (25.07.2009 в 21:39)
 

Спасибо, aetern!
Просто у меня бредовая идея была домом выкачивать весь xml и перестраивать по новой всё дерево при сохранении... вот я и подумал, что это больно "лихо"... мож какой ещё способ есть через всякие API в php для xml...

  Ответить  
 
 автор: GeorgeIV   (25.07.2009 в 22:08)   письмо автору
 
   для: Enso   (25.07.2009 в 22:04)
 

Вы себе противоречите - как можно вывести все элементы не выкачивая весь файл?

  Ответить  
 
 автор: GeorgeIV   (25.07.2009 в 21:50)   письмо автору
 
   для: enso   (25.07.2009 в 21:02)
 

а почему именно php? если редактируется выведенный в броузер файл, то лучше применить ява-скрипт и DOM( как вариант)

  Ответить  
 
 автор: Enso   (25.07.2009 в 22:07)   письмо автору
 
   для: GeorgeIV   (25.07.2009 в 21:50)
 

А как потом его сохранить без php? Файлы то на хосте крутятся?

  Ответить  
 
 автор: GeorgeIV   (25.07.2009 в 22:11)   письмо автору
 
   для: Enso   (25.07.2009 в 22:07)
 

У Вас редактирование в броузере, файлы на хосте. Естественно напрашивается аякс - редактируете в броузере и отправляете запрос на сервер, он сохраняет изменения в рабочем файле и подтверждает (или отвергает) изменения. Повторно уже скачивать весь файл нет смысла.

  Ответить  
 
 автор: Enso   (25.07.2009 в 23:49)   письмо автору
 
   для: GeorgeIV   (25.07.2009 в 22:11)
 

Так вот в этом и вопрос, пускай аякс, я такой вариант не отвергаю... мне нужно узнать как обновить в файле пару строчек из многих? Можно ли стандартными способами как-то через API или только регулярными выражениями с прегреплейсами и т.п. В этом файле есть данные, которые вообще не будут изменяться...

  Ответить  
 
 автор: GeorgeIV   (25.07.2009 в 23:54)   письмо автору
 
   для: Enso   (25.07.2009 в 23:49)
 

У каждого узла в XML есть что то уникальное, если совсем нет, тогда просто порядковый номер, параметр узла и новое его значение (или какой то признак, если удаляете) и отправляете это в запросе. У PHP на сервере много способов работы с XML, выбираете наиболее понятный и редактируете исходный XML

  Ответить  
 
 автор: Enso   (26.07.2009 в 13:16)   письмо автору
 
   для: GeorgeIV   (25.07.2009 в 23:54)
 

Всё это я понимаю, спасибо )
Мне нужна помощь именно со способом, я никак не могу определиться с тем каким способом лучше осуществлять изменение атрибута?
Может кто-нить приведёт простейший пример кода.
Спасибо.

  Ответить  
 
 автор: GeorgeIV   (26.07.2009 в 13:30)   письмо автору
 
   для: Enso   (26.07.2009 в 13:16)
 

у item какой нибудь из атрибутов уникален в предлах XML файла?

  Ответить  
 
 автор: Enso   (26.07.2009 в 13:36)   письмо автору
 
   для: GeorgeIV   (26.07.2009 в 13:30)
 

<item id="24" number="169" status_id="1" valid="true">

  Ответить  
 
 автор: GeorgeIV   (26.07.2009 в 13:39)   письмо автору
 
   для: Enso   (26.07.2009 в 13:36)
 

Я тогда снова возвращаюсь к аякс запросу. Вы же умеете, я надеюсь, работать с XML ответом аякса. Распарсили, вывели в форму, обработчик форму отправляет запрос на сервер с указанием ID элемента, котрый редактируется. Сервер производит аналогичную операцию и переписывает контент XML файла. Какой момент неясен?

  Ответить  
 
 автор: Enso   (26.07.2009 в 14:16)   письмо автору
 
   для: GeorgeIV   (26.07.2009 в 13:39)
 

Код, с помощью которого сервер непосредственно переписывает контент XML-файла после получения запроса от обработчика формы.
Приведите, пожалуйста, мини-пример, если можно.

  Ответить  
 
 автор: GeorgeIV   (26.07.2009 в 14:26)   письмо автору
 
   для: Enso   (26.07.2009 в 14:16)
 

Мини-пример смогу только в понедельник.
Но вариантов как минимум два - разбираете файл, находите узел с пришедшим ID, корректируете аттрибуты узла, записываете обратно в файл.
Второй - спомощью str_replace поправить контент файла.

  Ответить  
 
 автор: Enso   (26.07.2009 в 14:43)   письмо автору
 
   для: GeorgeIV   (26.07.2009 в 14:26)
 

Спасибо, GeorgeIV!
Было бы просто супер замечательно, если Вы в понедельник пример сможете продемонстрировать!
Наибольший интерес у меня к части "...корректируете аттрибуты узла, записываете обратно в файл..."

  Ответить  
 
 автор: GeorgeIV   (27.07.2009 в 18:42)   письмо автору
 
   для: Enso   (26.07.2009 в 14:43)
 

Не стал писать, потому что все таки прав Трианон - XML - это транспортный файл и моя помощь сделает медвежью услугу. Ведь изначально Вы как то получили это файл (из базы, файла и т.п). Логичнее, внести в него изменения и перевывести файл. Если пользователь не имеет права что то менять в исходных данных, а может менять только связанный с ним параметры, то следует к запросу от клиента прицеплять какой то признак его и первыводить XML файл, заменяя в нужных местах общие данные на данные конкретного клиента. Редактировать XML, это все таки дурной тон программирования.

  Ответить  
 
 автор: Enso   (27.07.2009 в 22:22)   письмо автору
 
   для: GeorgeIV   (27.07.2009 в 18:42)
 

Прекрасно! Всем спасибо!

  Ответить  
 
 автор: Trianon   (25.07.2009 в 23:55)   письмо автору
 
   для: Enso   (25.07.2009 в 23:49)
 

XML - не самый удобный формат хранения данных с целью модификации их по запросам...
Это скорее транспортный формат.

  Ответить  
 
 автор: Enso   (26.07.2009 в 13:20)   письмо автору
 
   для: Trianon   (25.07.2009 в 23:55)
 

Безусловно, но в данном случае как раз xml является источником данных... и не хотелось усложнять процесс его редактирования включением дополнительных блоков программы...

  Ответить  
 
 автор: Trianon   (26.07.2009 в 13:26)   письмо автору
 
   для: Enso   (26.07.2009 в 13:20)
 

Вы так пишете, будто сейчас у Вас разработан и отлажен процесс редактирования этого XML.
И Вам этот процесс нежелательно усложнять.
Если оно и вправду так - тогда конечно.
Но тогда я не понимаю, в чем вопрос?

  Ответить  
 
 автор: Enso   (26.07.2009 в 13:35)   письмо автору
 
   для: Trianon   (26.07.2009 в 13:26)
 

Есть XML-файлы, в которых у тегов несколько атрибутов
типа <item id="24" number="169" status_id="1" valid="true">
Все эти данные забираются из xml флеш-картами, на которых нужно постоянно изменять информацию, соответственно нужно изменять параметры(атрибуты тегов) в xml... я не могу разобраться - можно ли как-то изменять(перезаписывать, например вместо '2' записать '1') конкретный атрибут конкретного тега с помощью API php для xml, без пересборки по новой всего дерева xml и т.п. или есть только слишком удобные методы через регулярные выражения, промежуточные базы и т.п. ?

  Ответить  
 
 автор: Trianon   (26.07.2009 в 13:38)   письмо автору
 
   для: Enso   (26.07.2009 в 13:35)
 

здесь нет ни слова про имеющийся процесс редактирования.

В принципе, можно при каждом изменении преобразовывать XML-файл в массив , менять отдельные его элементы, а потом формировать этот файл заново.
Но повторяю, на мой взгляд, лучше хранить данные в БД, а XML формировать либо на лету - при запросе, либо после модификации данных, упреждая запрос.

  Ответить  
 
 автор: Enso   (26.07.2009 в 14:17)   письмо автору
 
   для: Trianon   (26.07.2009 в 13:38)
 

Спасибо, Trianon.
Ваша позиция ясна.

P.S.: Конечно, нет ни слова про процесс редактирования, т.к. я как раз и хочу спросить наиболее оптимальный вариант реализации данного процесса... это я просто ситуацию описал, чтоб понятнее были обстоятельства...

  Ответить  
 
 автор: GeorgeIV   (26.07.2009 в 14:30)   письмо автору
 
   для: Enso   (26.07.2009 в 14:17)
 

А XML Вам приходит со стороны или формируется на Вашем сервере?

  Ответить  
 
 автор: Enso   (26.07.2009 в 14:48)   письмо автору
 
   для: GeorgeIV   (26.07.2009 в 14:30)
 

Изначальный xml-файл я сам создаю, но его структура диктуется разработчиком флешек, для которых эти данные и предназначены. Мне нужно приложение написать, чтоб в код xml напрямую никто не лазил. А единственная проблема это подобрать наиболее оптимальный вариант изменения исходного xml-файла программно.

  Ответить  
 
 автор: Trianon   (26.07.2009 в 14:52)   письмо автору
 
   для: Enso   (26.07.2009 в 14:48)
 

Имя этого файла Вы менять ни при каких обстоятельствах не можете?

  Ответить  
 
 автор: Enso   (26.07.2009 в 19:02)   письмо автору
 
   для: Trianon   (26.07.2009 в 14:52)
 

лучше не менять

  Ответить  
 
 автор: Trianon   (26.07.2009 в 20:12)   письмо автору
 
   для: Enso   (26.07.2009 в 19:02)
 

умыл руки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования