Как добавить в XML файл с PHP предпочтительно с SimpleXML
У меня есть 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);
У меня было множество неудачных попыток, это должно быть так просто. В основном я хочу добавить галерею с именем childs filepath и thumb В этот же файл (xml / config.РНР).
Как я уже сказал, я вроде как получил его на работу,но он неформатирован и у него нет тега галереи.
Вопрос
Как вставить другую (с детьми) в приведенный выше XML файл?
Предпочтительно даже с использованием simpleXML
1 ответ:
С помощью 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 не является сложным шагом и рассматривается в много вопросов здесь.