0

ajaxを介して、xmlを書き込むphpファイルにデータを投稿しようとしています。私は基本的に、データの一部を投稿して、xml の特定の部分を置き換えたいと考えています。

js:

$(".aSave").click(function(){
    var name = $(this).attr("data-name");
    var value = $(this).attr("data-value");
    var dataObj = {};
    dataObj[name]=value;

    $.ajax({
        url: 'view/template/common/panel.php',
        type: 'post',
        data: dataObj,
    }).done(function(){
        alert("saved!");
    });
});

php:

<?php
    $fruits [] = array(
        $orangesValue = $_POST['oranges'],
        $applesValue = $_POST['apples'], 
    ); 

    $doc = new DOMDocument(); 
    $doc->formatOutput = true; 

    $mainTag = $doc->createElement( "fruits" ); 
    $doc->appendChild( $mainTag ); 

    $oranges = $doc->createElement("oranges"); 
    $oranges->appendChild($doc->createTextNode($orangesValue)); 
    $mainTag->appendChild($oranges);

    $apples = $doc->createElement("apples"); 
    $apples->appendChild($doc->createTextNode($applesValue)); 
    $mainTag->appendChild($apples);

    echo $doc->saveXML(); 
    $doc->save("fruits.xml")
?>

そのため、oranges 値を送信すると、oranges 値のみを含む新しい xml ファイルが書き込まれます。私が投稿している値のみを置き換えることは可能ですか?

乾杯

4

1 に答える 1

1

私が正しく理解しているのであれば、既存の XML ドキュメントを読み取り、oranges要素のテキスト コンテンツを置き換えて、ドキュメントを再度保存しますか?

次にこれを試してください:

$fileName = '/my/absolute/path/to/my/file.xml';
$doc = new DOMDocument();
$doc->load($fileName);
$nodes = $doc->getElementsByTagName('oranges');

if (NULL != $nodes) {
  $nodes->item(0)->nodeValue = $_POST['oranges'];
}

$doc->save($fileName);

しかし、これは非常に複雑です (または、私は DOM 拡張が嫌いです)。simplexml拡張機能が利用可能な場合は、これを試してください。

$fileName = 'blabla.xml';
$xml = simplexml_load_file($fileName);
$xml->oranges = $_POST['oranges'];
$xml->asXML($fileName);

もちろん$_POST、XML ファイルにデータを書き込む前に、データが正しいことを確認する必要があります。リンゴを投稿したかオレンジを投稿したかに基づいて動作する場合はoranges、次の変数に置き換えます。

foreach ($_POST as $fruit => $val) {
  $xml->{$fruit} = $val;
}
于 2012-07-07T08:54:06.877 に答える