Как добавить в XML-файл с PHP, желательно с SimpleXML - PullRequest
7 голосов
/ 17 августа 2011

У меня есть XML-файл, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<data>
    <config>
    </config>

    <galleries>
         // We have loads of these <gallery>
         <gallery>
             <name>Name_Here</name>
             <filepath>filepath/file.txt</filepath>
             <thumb>filepath/thumb.png</thumb>
         </gallery>
    </galleries>
</data>

Я пытался выяснить, как добавить еще один в мой вышеупомянутый XML-файл.Я попытался использовать simplexml, но не смог заставить его работать, поэтому я попробовал этот ответ , а также кучу других на stackoverflow.Но я просто не могу заставить его работать.
Я могу легко читать из xml-файла и получать всю необходимую информацию, но мне нужно иметь возможность добавлять тег галереи к нему, приведенный ниже код не работает, и когда это происходитЯ могу вставить только 1 элемент, и он вставляет его 3 раза, я не понимаю этого.

 $data = 'xml/config.xml';
 // Load document
 $xml = new DOMDocument;
 $xml->load( $data ); #load data into the element

 $xpath = new DOMXPath($xml);
 $results = $xpath->query('/data/galleries');
 $gallery_node = $results->item(0);

 $name_node = $xml->createElement('name');
 $name_text = $xml->createTextNode('nametext');

 $name_node = $name_node->appendChild($name_text);

 $gallery_node->appendChild($name_node);

 echo $xml->save($data);

У меня было множество неудачных попыток, это должно быть так просто.В основном я хочу добавить галерею с именем файла filepath и большим пальцем в этот же файл (xml / config.php).

Как я уже сказал, я вроде заставил его работать, но он не отформатирован и не имеет тега галереи.

Вопрос
Как мневставить другую <галерею> (с дочерними элементами) в указанный выше XML-файл?
Желательно даже с использованием simpleXML

1 Ответ

15 голосов
/ 17 августа 2011

С SimpleXML вы можете использовать метод addChild().

$file = 'xml/config.xml';

$xml = simplexml_load_file($file);

$galleries = $xml->galleries;

$gallery = $galleries->addChild('gallery');
$gallery->addChild('name', 'a gallery');
$gallery->addChild('filepath', 'path/to/gallery');
$gallery->addChild('thumb', 'mythumb.jpg');

$xml->asXML($file);

Имейте в виду, что SimpleXML не будет "форматировать" XML для вас, однако, еслинеформатированное представление SimpleXML в аккуратно с отступом XML не является сложным шагом и рассматривается в лотах вопросов здесь.

...