web-dev-qa-db-ja.com

PHP)でXMLノードを更新しています

XMLファイルtest.xmlがあります

<?xml version="1.0"?>
<info>
  <user>
    <name>
      <firstname>FirstName</firstname>
      <lastname>Last Name</lastname>
      <nameCoordinate>
        <xName>125</xName>
        <yName>20</yName>
      </nameCoordinate>
    </name>
  </user>
</info>

フォーム送信時にPHPを使用してノードxName&yNameを更新しようとしています。したがって、simplexml_load_file()を使用してファイルをロードしました。PHP =フォームアクションコードは以下のとおりです

<?php 
    $xPostName = $_POST['xName'];
    $yPostName = $_POST['yName'];

    //load xml file to edit
        $xml = simplexml_load_file('test.xml');

    $xml->info->user->name->nameCoordinate->xName = $xPostName;
    $xml->info->user->name->nameCoordinate->yName = $yPostName;
    echo "done";
?>

ノード値を更新したいのですが、上記のコードが間違っているようです。誰かが私がそれを修正するのを手伝ってくれる?

更新:私の質問はこれにいくぶん似ています PHPを使用してXMLファイルを更新する しかし、ここでは、外部ファイルからXMLをロードし、属性ではなく要素を更新しています。そこに私の混乱があります。

13
ptamzz

適切なノードにアクセスしていません。あなたの例では、$xmlはルートノードを保持します<info/>。ここに素晴らしいヒントがあります:常にルートノードの後に​​XMLドキュメントを保持する変数に名前を付けてください、それはそのような混乱を防ぎます。

また、ワードミュイラートが指摘したように、ファイルを保存する必要があります。

修正された例は次のとおりです。

// load the document
// the root node is <info/> so we load it into $info
$info = simplexml_load_file('test.xml');

// update
$info->user->name->nameCoordinate->xName = $xPostName;
$info->user->name->nameCoordinate->yName = $yPostName;

// save the updated document
$info->asXML('test.xml');
31
Josh Davis

SimpleXMLElementの asXML メソッドを使用して、変更をファイルに書き戻す必要があります。

3
Ward Muylaert

このようにしてみてください。

$xmlDoc = new \DOMDocument;
$xmlDoc->load('Books.xml');
$response = $xmlDoc->getElementsByTagName('Text');

foreach ($response as $node){
        $node->nodeValue = 'test';
    }
$xmlDoc->saveXML();

これは最善の答えではないかもしれませんが、私にとってはうまくいきました。

0
Ruhith Udakara