使用PHP更新XML节点

pta*_*mzz 13 php xml simplexml

我有一个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>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用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";
?>
Run Code Online (Sandbox Code Playgroud)

我想更新节点值,但上面的代码似乎不正确.任何人都可以帮我纠正吗?

更新:我的问题有点类似于使用PHP更新XML文件但在这里,我从外部文件加载XML,我也在更新元素,而不是属性.这就是我的困惑所在.

Jos*_*vis 31

您没有访问正确的节点.在您的示例中,$xml保留根节点<info/>.这里有一个很好的提示:始终将保存XML文档的变量命名为其根节点,这样可以防止这种混淆.

此外,正如Ward Muylaert指出的那样,您需要保存文件.

这是更正后的例子:

// 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');
Run Code Online (Sandbox Code Playgroud)