PHP XML DOM 添加、修改和更新
Posted
技术标签:
【中文标题】PHP XML DOM 添加、修改和更新【英文标题】:PHP XML DOM Add, Modify and Update 【发布时间】:2020-07-27 16:28:13 【问题描述】:我有一个名为“apps.xml”的 XML 文件,其结构如下:
<?xml version="1.0" encoding="utf-8"?>
<applications>
<app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
我希望能够使用在我的网站上运行的 php 脚本 ($_GET)、DOM 和 Xpath 添加、修改和更新(保存对文件的更改)上述 XML 文件。
添加新的 XML 条目(最后一行)后,文件输出如下所示:
<?xml version="1.0" encoding="utf-8"?>
<applications>
<app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
在修改/更新之后(修改/更新的第一个条目)将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<applications>
<app id="b461ae4a" valid="1" company="Orange Inc." appname="None" user="tommy" description="Test" note="None" />
<app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
并添加更多我想要实现的示例:
http://www.myadress.com/apps.php?append=1&id=d65k274p&valid=1&company=Orange%20Inc&appname=None&user=admin&description=Test¬e=None
// Append argument would decide to add a whole new entry set to 1 or if it is on 0 then to be modified the whole entry by given "id".
$xappend = $_GET["append"];
$xid = $_GET["id"];
$xvalid = $_GET["valid"];
$xcompany = $_GET["company"];
$xappname = $_GET["appname"];
$xuser = $_GET["user"];
$xdescription = $_GET["description"];
$xnote = $_GET["note"];
if (file_exists('apps.xml'))
$xorig = simplexml_load_file('apps.xml');
else
exit('Failed to open apps.xml !');
任何帮助将不胜感激!
【问题讨论】:
搜索 simplexml 或 domdocument。无论如何,你的问题太宽泛了。尝试先做一些事情,然后在遇到问题时再回来。 @FelippeDuarte 是的,我搜索了 DOMDocument,这个问题我做不了那么多,因为我在 PHP 方面不太好,但我已经在 ASP 中做到了,因为我使用多年来一直如此,但不幸的是,我的主机不支持仅 ASP 的 PHP。 请编辑您的问题以获取您想要进行的更改的示例以及更改后所需的输出。 @JackFleeting 我马上就做,谢谢! 【参考方案1】:试试这个方法,看看它是否适用于你的实际 xml:
<?php
$original = <<<SNIPPET
<applications>
<app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
SNIPPET;
$xorig = simplexml_load_string($original);
$ins_pnt = $xorig->xpath('/applications');
$target = $xorig->xpath('/applications/app[1]');
$new_node = clone $target[0];
$new_node['id'] = "d65k274p";
// the function is lifted from https://***.com/a/4778964/9448090
function node_append(SimpleXMLElement $to, SimpleXMLElement $from)
$toDom = dom_import_simplexml($to);
$fromDom = dom_import_simplexml($from);
$toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true));
node_append($ins_pnt[0], $new_node);
echo $xorig->asXML();
输出:
<?xml version="1.0" encoding="UTF-8"?>
<applications>
<app id="b461ae4a" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="1c94395b" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
<app id="d65k274p" valid="0" company="Lemon Inc." appname="None" user="admin" description="Test" note="None" />
</applications>
【讨论】:
试过了,但除了空白的php屏幕外没有得到任何结果。还添加了 $xorig = simplexml_load_file('apps.xml'); @beic - 试试看here。 我在上面扩展了我的问题,希望您现在可以更好地理解我的需求。谢谢! @beic 我的回答是针对您最初的问题;你现在基本上是在问一个新问题。您可能应该将编辑作为新问题发布。 从一开始就想点赞,但不知道如何正确表达自己!你能编辑你的答案吗?您可以在我最初的问题中看到这一行指的是我的扩展问题“PHP script ($_GET), DOM and Xpath running on my website”。【参考方案2】:经过很长时间,我作为初学者设法做到了这一点:
$xmlFile = 'apps.xml';
$xorig = simplexml_load_file($xmlFile) or die('0');
$app = $xorig->addChild('app');
$app->addAttribute('id', $xid);
$app->addAttribute('valid', $xval);
$app->addAttribute('company', $xcmp);
$app->addAttribute('appname', $xanam);
$app->addAttribute('user', $xusr);
$app->addAttribute('description', $xdesc);
$app->addAttribute('note', $xnote);
【讨论】:
以上是关于PHP XML DOM 添加、修改和更新的主要内容,如果未能解决你的问题,请参考以下文章