PHP добавить узел в существующий XML-файл и сохранить - PullRequest
5 голосов
/ 15 марта 2010

Можно ли с помощью php's XMLWriter вставить новый узел в существующий XML-файл, а затем сохранить файл? Для меня это было бы гораздо выгоднее, если бы каждый раз, когда я захотел обновить XML-файл, создавал новый файл.

Ответы [ 4 ]

8 голосов
/ 15 марта 2010

Я бы использовал simplexml. Я выхожу на передний план и предполагаю, что если у вас есть XML-писатель, у вас также есть simplexml.

Давайте посмотрим, чтобы добавить узел, давайте предположим очень простой (получить?) XML-файл:

 <desserts>
     <cakes>
        <cake>chocolate</cake>
        <cake>birthday</cake>
     </cakes>
     <pies>
        <pie>apple</pie>
        <pie>lemon</pie>
     </pies>
</desserts>

Если это в файле, и вы хотите добавить новый пирог, вы должны сделать:

$desserts = new SimpleXMLElement;

$desserts->loadfile("desserts.xml");

$desserts->pies->addChild("pie","pecan");

Конечно, это может быть намного сложнее, чем это. Но как только вы освоитесь, это очень полезно.

2 голосов
/ 15 марта 2010

Вы можете использовать PHP Simple XML . Вы должны прочитать содержимое файла, добавить узел с простым XML и записать содержимое обратно.

0 голосов
/ 08 августа 2014
$xml_doc = new DomDocument;

$xml_doc->Load('yourfilename.xml');

$desserts = $xml_doc->getElementsByTagName('desserts')->item(0);

$burger =$xml_doc->createElement('burger');

$desserts->appendChild($burger);

$done = $xml_doc->save("yourfilename.xml");

Это прекрасно работает.И вы можете добавить атрибуты в гамбургер тоже

0 голосов
/ 15 марта 2010

Общая проблема в том, что правильно сформированный XML-документ должен иметь только один корневой элемент. Это означает, что вы должны прочитать / проанализировать полное дерево документа, чтобы иметь возможность добавить новый элемент внутри. Отсюда и все предложения Simplexml здесь.

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

См. Эту ветку на perlmonks.com , где обсуждаются файлы журнала XML. Особенно интересным является комментарий «mirod», который показывает, как правильно сформировать XML-файл и при этом иметь возможность добавлять узлы в документ. Решение состоит в том, чтобы поместить произвольные узлы в отдельный файл (который сам по себе плохо сформирован из-за корня элемента root) и ссылаться на файл как на внешний объект. В вашем случае вы напишете файл, который будет включен как объект, со стандартной функцией PHP fopen, fwrite fclose при открытии файла для добавления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...