每次运行代码,文件更新时,我都可以看到文件上次编辑的日期和时间已更新,但XML文件中的内容未更新。
我刚尝试更新以下XML代码
<?xml version="1.0" encoding="utf-8"?>
<topcont>
<sitenondualtraining>
<title>The Heart of Awakening</title>
<descripition>nondual</descripition>
<link>www.test.com/post/latestpost</link>
</sitenondualtraining>
</topcont>
使用PHP代码
$topcont = new DOMDocument();
$topcont->load("http://fenner.tk/topcont.xml");
$topcont->topcont->sitenondualtraining->title = 'test';
$topcont->sitenondualtraining->descripition = $_POST['nd2'];
$topcont->sitenondualtraining->link = $_POST['nd3'];
$topcont->Save("topcont.xml");
我也试过
$topcont = new SimpleXmlElement('http://fenner.tk/topcont.xml',null, true);
$topcont->sitenondualtraining->title = $_POST['nd1'];
$topcont->sitenondualtraining->descripition = $_POST['nd2'];
$topcont->sitenondualtraining->link = $_POST['nd3'];
$topcont->asXml('topcont.xml');
但这些都不起作用。任何人都可以指出问题所在吗?感谢。
文件权限设置为777但仍无法正常工作
没有错误但警告
Warning: Creating default object from empty value in /home/fenner/public_html/topads.php on line 20
Warning: Creating default object from empty value in /home/fenner/public_html/topads.php on line 21 /home/fenner/public_html/
答案 0 :(得分:1)
使用DomDocument,你几乎就在那里。你可以这样做:
$topcont = new DOMDocument();
$topcont->load("topcont.xml");
$topcont->getElementsByTagName("title")->item(0)->nodeValue = $_POST['nd2'];
$topcont->getElementsByTagName("description")->item(0)->nodeValue = $_POST['nd2'];
$topcont->getElementsByTagName("link")->item(0)->nodeValue = $_POST['nd3'];
$topcont->save("topcont.xml");
请记住在存储数据之前清理输入内容;)
另外值得研究的是创建cdata sections并使用replaceData,具体取决于您打算在每个节点中存储的内容。
修改强>
在回复下面的评论时,如果您要处理多个子节点,可能需要稍微更改一下xml结构。通过这种方式,您可以更轻松地循环并更新您感兴趣的节点。您将在下面看到我将'sitenondualtraining'和'siteradiantmind'移动为'item'节点的id,尽管您可以轻松地将其更改为类似<site id="nodualtraining>
如果那更像你想要的那样。
<?xml version="1.0" encoding="utf-8"?>
<topcont>
<item id="sitenondualtraining">
<title>test</title>
<description>hello test</description>
<link>hello</link>
</item>
<item id="siteradiantmind">
<title>The Heart of Awakening</title>
<description>radiantmind</description>
<link>www.radiantmind.com/post/latestpost</link>
</item>
</topcont>
您的PHP代码将是这样的,再次这是非常基本的,可以整理,但是一个良好的开端:
$items = $topcont->getElementsByTagName("item");
// loop through each item
foreach ($items as $item) {
$id = $item->getAttribute('id');
// check the item id to make sure we edit the correct one
if ($id == "sitenondualtraining") {
$item->getElementsByTagName("title")->item(0)->nodeValue = $_POST['nd1'];
$item->getElementsByTagName("link")->item(0)->nodeValue = $_POST['nd2'];
$item->getElementsByTagName("description")->item(0)->nodeValue = $_POST['nd3];
}
}
如果您有点喜欢冒险,可以查看xpath和xpath query,您可以在大多数php文档中找到一些示例代码以帮助您入门,其他用户的评论也可以提供帮助