用PHP更新XML节点
我有一个XML文件test.XML用PHP更新XML节点,php,xml,simplexml,Php,Xml,Simplexml,我有一个XML文件test.XML <?xml version="1.0"?> <info> <user> <name> <firstname>FirstName</firstname> <lastname>Last Name</lastname> <nameCoordinate> <xName>125</x
<?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>
名字
姓
125
20
我试图在表单提交中使用PHP更新节点xName&yName。因此,我使用simplexml\u load\u 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";
?>
info->user->name->namecordinate->xName=$xPostName;
$xml->info->user->name->namecordinate->yName=$yPostName;
回应“完成”;
?>
我想更新节点值,但上面的代码似乎不正确。谁能帮我纠正一下吗 更新:
我的问题与此类似,但在这里,我从外部文件加载XML,并且更新元素,而不是属性。这就是我的困惑所在。您必须将更改写回文件,使用SimpleXMLElement的方法。您没有访问正确的节点。在您的示例中,
$xml
保存根节点
。这里有一个很好的提示:始终将保存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');
//加载文档
//根节点不可用,因此我们将其加载到$info中
$info=simplexml_load_文件('test.xml');
//更新
$info->user->name->namecordinate->xName=$xPostName;
$info->user->name->namecordinate->yName=$yPostName;
//保存更新的文档
$info->asXML('test.xml');
像这样试试
$xmlDoc = new \DOMDocument;
$xmlDoc->load('Books.xml');
$response = $xmlDoc->getElementsByTagName('Text');
foreach ($response as $node){
$node->nodeValue = 'test';
}
$xmlDoc->saveXML();
这可能不是最好的答案,但对我来说很有效。什么不符合预期?您没有解释错误。我要更新节点值。这没有发生。我已经更新了上面的问题。我相信这会重写整个标签。我只想更新特定的节点。确实如此,但如果不在自己的代码中编写一半的XML解释逻辑来只编写特定的节点,我相信这就是SimpleXML所能做到的。如果xName或yName节点不存在,会发生什么?如果您有多个用户使用多个yName,并且希望同时编辑所有用户,会发生什么?有什么想法吗?