是否可以使用php的XMLWriter
将新节点插入现有的xml文件,然后保存文件?每次我想要更新xml文件时,实际上创建一个新文件对我来说会更有益。
答案 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");
这项工作非常好。你也可以为汉堡添加属性