[英]How to append to a XML file with PHP preferably with SimpleXML
I have a XML file which looks like this:我有一个 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>
I have been trying to figure out how to append another < gallery > to my above xml file.我一直在试图弄清楚如何将 append 另一个 < 画廊 > 到我上面的 xml 文件。 I tried using simplexml but couldn't get it to work, so I tried this answer as well as a bunch of others on stackoverflow.
我尝试使用 simplexml 但无法让它工作,所以我尝试了这个答案以及 stackoverflow 上的其他一些答案。 But just cant get it to work.
但就是不能让它工作。
I can read from a xml file easily and get all the info I need, But I need to be able to append a gallery tag to it, The code below doesnt work and when it does, I can only insert 1 element, and it inserts it 3 times, i dont understand this.我可以轻松地从 xml 文件中读取并获取我需要的所有信息,但我需要能够 append 为其添加一个画廊标签,下面的代码不起作用,当它起作用时,我只能插入 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);
I've had loads of failed attempts at this, this should be so easy.我有很多失败的尝试,这应该很容易。 Basically I want to add a gallery with childs name filepath and thumb to this same file (xml/config.php).
基本上我想在同一个文件(xml/config.php)中添加一个带有子名称文件路径和拇指的画廊。
Like I said, I kinda got it to work, but its unformatted and a doesnt have the gallery tag.就像我说的,我有点让它工作,但它没有格式化并且没有画廊标签。
Question问题
How do I insert another < gallery > (with children) into the above XML file?如何在上述 XML 文件中插入另一个 <gallery> (with children)?
Preferably even using simpleXML最好甚至使用 simpleXML
With SimpleXML, you can use the addChild()
method.使用 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);
Be aware that SimpleXML will not "format" the XML for you, however going from an unformatted SimpleXML representation to neatly indented XML is not a complicated step and is covered in lots of questions here.请注意,SimpleXML 不会为您“格式化” XML,但是从未格式化的 SimpleXML 表示到整齐缩进的 XML 并不是一个复杂的步骤,并且在此处包含许多问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.