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」ノードを取得し、フィードのコンテンツを新しく作成された要素「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

コード内のほとんどすべてが OK です。変更するだけです:

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

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