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