PHP将节点添加到现有xml文件并保存

时间:2010-03-15 12:32:38

标签: php xml

是否可以使用php的XMLWriter将新节点插入现有的xml文件,然后保存文件?每次我想要更新xml文件时,实际上创建一个新文件对我来说会更有益。

4 个答案:

答案 0 :(得分:8)

我会改用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");

当然,它可能比这更复杂。但是一旦掌握了它,它就非常有用。

答案 1 :(得分:2)

您可以使用PHP的Simple XML。您必须阅读文件内容,使用Simple XML添加节点并重新编写内容。

答案 2 :(得分:0)

这里的一般问题是格式良好的XML文档必须只有一个根元素。这意味着您必须在完整的文档树中读取/解析才能在其中添加新元素。因此这里有所有simplexml建议。

XMLWriter用于非常有效地编写XML数据流,但不能修改现有文件(不先读取它们)。

请参阅讨论XML日志文件的perlmonks.com上的此主题。特别有趣的是“mirod”的评论,它显示了如何拥有格式良好的XML文件,并且仍然能够将节点添加到文档中。解决方案是将任意节点放在一个单独的文件中(由于根元素的混乱而不能自行构造)并将该文件作为外部实体引用。在您的情况下,您将编写将作为实体包含的文件,其中包含标准PHP fopen,fwrite fclose函数,同时打开文件以进行追加。

答案 3 :(得分:-1)

$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");

这项工作非常好。你也可以为汉堡添加属性