如何使用PHP和SimpleXML向XML文件追加内容?

9

I have a XML file which looks like this:

<?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>

我一直在尝试如何将另一个< gallery >附加到我的上面的xml文件中。我尝试使用simplexml,但无法使其正常工作,因此我尝试了这个答案以及stackoverflow上的其他一堆。但仍无法使其正常工作。
我可以轻松地从xml文件中读取并获取所有所需信息,但我需要能够附加一个gallery标签。下面的代码不起作用,当它起作用时,我只能插入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);

我曾多次尝试过这个,这应该很容易。基本上我想在同一个文件(xml/config.php)中添加一个包含子名称、文件路径和缩略图的图库。
就像我说的,我有点做出来了,但是它没有格式化,并且没有图库标签。
问题: 如何在上述XML文件中插入另一个带有子元素的< gallery >标签? 最好使用simpleXML。
1个回答

18

使用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 不是一个复杂的步骤,并且在这里有很多相关问题涵盖了此内容。

这个可以工作!但是它在我的xml中输出了3次,有什么想法为什么会这样?它在同一行上输出了3组<gallery>和子元素,我的上面的脚本也是这样做的?有什么线索吗? - Anil
2
你在循环中可能做错了一些事情。你展示的内容或我提供的内容都不会重复三次画廊元素。 - salathe
目前正在查看特定的RSS源,似乎那里的惯例是将更新的条目添加在其他条目之上,而不是之下。在编写节点/“画廊”时是否可以指定这一点? - TenLeftFingers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接