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をロードし、属性ではなく要素を更新しています。そこに私の混乱があります。
適切なノードにアクセスしていません。あなたの例では、$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');
SimpleXMLElementの asXML メソッドを使用して、変更をファイルに書き戻す必要があります。
このようにしてみてください。
$xmlDoc = new \DOMDocument;
$xmlDoc->load('Books.xml');
$response = $xmlDoc->getElementsByTagName('Text');
foreach ($response as $node){
$node->nodeValue = 'test';
}
$xmlDoc->saveXML();
これは最善の答えではないかもしれませんが、私にとってはうまくいきました。