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

PHP将节点添加到现有xml文件并保存,php,xml,Php,Xml,是否可以使用php将新节点插入现有xml文件,然后保存该文件?如果每次我想更新一个xml文件时都要创建一个新文件,那么这对我来说会更有好处。您可以使用PHP的。您必须读取文件内容,用简单的XML添加节点,然后写回内容。我将使用它。我将冒险假设,如果您有XML编写器,那么您也有simplexml 让我们看看,要添加一个节点,我们假设一个非常简单的xml文件: <desserts> <cakes> <cake>chocolate<

是否可以使用php将新节点插入现有xml文件,然后保存该文件?如果每次我想更新一个xml文件时都要创建一个新文件,那么这对我来说会更有好处。

您可以使用PHP的。您必须读取文件内容,用简单的XML添加节点,然后写回内容。

我将使用它。我将冒险假设,如果您有XML编写器,那么您也有simplexml

让我们看看,要添加一个节点,我们假设一个非常简单的xml文件:

 <desserts>
     <cakes>
        <cake>chocolate</cake>
        <cake>birthday</cake>
     </cakes>
     <pies>
        <pie>apple</pie>
        <pie>lemon</pie>
     </pies>
</desserts>

当然,它可以比这复杂得多。但是一旦掌握了窍门,它就非常有用。

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

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

有关讨论XML日志文件的位置,请参阅此线程。特别有趣的是“mirod”的评论,它展示了如何拥有格式良好的XML文件,并且仍然能够向文档添加节点。解决方案是将任意节点放在一个单独的文件中(由于根元素混乱,该文件本身格式不好),并将该文件作为外部实体引用。在您的例子中,您需要编写一个文件,该文件将作为一个实体包含在标准PHP fopen、fwrite fclose函数中,同时打开该文件进行附加

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

这工作做得很好。您还可以向burger添加属性

大多数XML解析器是否能够很好地理解/处理引用文件,从而依赖于此解决方案?链接节点未被验证的想法是一个非常安全和容易理解的想法吗?我可以看出,如果浏览器/客户端/解析器只从引用的下游进入,情况会是怎样的,但是为了防止格式错误的引用,是否有可能需要首先验证整个文档?或者它只需要在主xml文档的上下文中有效吗?我不知道有多少xml解析器知道“大多数”解析器是否支持实体扩展。我主要使用PHP,PHP XML解析器(xmllib的包装器)支持它。包含后,完整文件必须格式良好。我将编辑我的答案以反映这一点。
$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");