1

PHP 不是我的世界,所以我需要一些帮助来更新 xml 文件。这是我第一次使用 DOM,似乎没有替换元素。

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<feedback>
  <feed id="0">
    <title>some title</title>
    <desc><![CDATA[some text]]></desc>
  </feed>
  <feed id="1">
    <title>some title</title>
    <desc><![CDATA[some text]]></desc>
  </feed>
  <feed id="2">
    <title>some title</title>
    <desc><![CDATA[some text]]></desc>
  </feed>
</feedback>

和PHP代码:

<?php

    if ($_POST['agg']) {

        $selid = $_POST['selectedfeed'];
        $newtitolo = $_POST['title'];
        $newdesc = nl2br($_POST['feed']);

        $file = "feedback.xml";
        $fp = fopen($file, "rb") or die("cannot open file");
        $str = fread($fp, filesize($file));

    $xml = new DOMDocument();
    $xml->formatOutput = true;
    $xml->preserveWhiteSpace = false;
    $xml->loadXML($str) or die("Error");    

    $root = $xml->documentElement;

    $oldfeed = $root->getElementsByTagName("feed")->item($selid);

    $title = $xml->createElement("title");
    $titleText = $xml->createTextNode($newtitle);
    $title->appendChild($titleText);

    $desc = $xml->createElement("desc");
    $descText = $xml->createCDATAsection($newdesc);
    $desc->appendChild($descText);

    $feed = $xml->createElement("feed");
    $feed->appendChild($title);
    $feed->appendChild($desc);

    $root->replaceChild($feed,$oldfeed);

    $xml->saveXML("feedback.xml");
    }
?>

对于上面的代码,我需要获取一个具有特定 ID 的“feed”节点,并将 feed 的内容替换为新创建的元素“title”和“desc”(cdata)。

我怎样才能做到这一点?

4

2 回答 2

0

使用 DOMDocument::getElementById()](http://www.php.net/manual/en/domdocument.getelementbyid.php) 找到您需要的提要。

$oldfeed = $xml->getElementById($selid);

然后使用DOMDocument::save()将 XML 保存到文件中。

$xml->save('feedback.xml');

DOMDocument::save() 将文件名作为第一个参数。DOMDocument::saveXML() 将 DOMNode 作为第一个参数并回显内容(它不保存它)。

于 2012-09-11T16:33:36.180 回答
0

几乎你的代码中的每一件事都是好的。只是改变:

 $xml->saveXML("feedback.xml");

 $xml->save("feedback.xml");
于 2012-09-11T18:40:27.080 回答