XML文件内容不使用PHP更新

时间:2014-01-18 21:22:24

标签: php xml

每次运行代码,文件更新时,我都可以看到文件上次编辑的日期和时间已更新,但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/

1 个答案:

答案 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文档中找到一些示例代码以帮助您入门,其他用户的评论也可以提供帮助

供参考:getAttributegetElementsByTagName