Возможно ли обновить часть XML файла через PHP?

Есть файл вида (упрощено):
<products>
	<product id="1">
		<name>Test 01</name>
		<price>123</price>
	</product>
	...
	<product id="999">
		<name>Test 999</name>
		<price>456</price>
	</product>
</products>

Нужно, к примеру, изменить <product id="123">. Самое простое решение - полностью генерировать файл каждый раз, когда в него вносятся правки (информация берется с базы данных).
Есть ли библиотека на PHP позволяющая перейти к строке <product id="123"> и изменить, к примеру, <price>456</price>? Или можно просто считывать содержимое файла в строку и с помощью str_replace менять нужные участки? (теряется форматирование файла).

Какие будут идеи по поводу редактирования XML онлайн?
  • Вопрос задан
  • 1295 просмотров
Решения вопроса 1
@nozzy
Symfony, Laravel, SQL
$products = simplexml_load_file('your_file.xml');
$products[0]->price = 321;
$products->asXML('your_file.xml');
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
Если xml файл генерируете вы, вы можете гарантировать например его форматирование (запретить перенос критичных для вас данных на новые строки), в этом случае очень много ситуаций можно обработать простым поиском и заменой.

В сложных ситуациях, когда нужно искать, где именно и что заменить, можно парсить xml самостоятельно, построчно, есть для этого даже готовые методы
https://secure.php.net/manual/ru/ref.xml.php
т.е. вы построчно парсите xml для поиска нужной строки, а запись ведете как с обычным текстовым файлом, построчно, подменив нужные данные на лету.

p.s. если у вас большие данные, что требуется такая оптимизация (если вам не подходит вариант, описанный в соседнем ответе) то... меняйте логику вашей программы,.. xml (или например json) вообще самый не подходящий инструмент для хранения.
Ответ написан
Комментировать
@AlexanderKomarchouk
программист PHP, embedded atmega/stm32
Смысл то в чем? Это же не база данных, а текстовый файл.
Файл, который при любом изменении будет полностью перезаписан.
Если вы что то храните в объемных XML, и беспокоит возможная нагрузка, то разделите их по каким то параметрам, пусть у вас в файловой системе будет не один большой файл, а N-е количество файлов поменьше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы