如何使用PHP修改XML节点属性值?修改user1密码场景问题求助
错误点汇总
- 加载XML后立即调用
asXML()回写文件属于多余操作,此时还未做任何修改。 - XPath路径错误:
simplexml_load_file返回的对象本身就是根节点<Users>,无需额外拼接->Users,否则无法匹配到目标User节点。 - 不能直接给
xpath()返回的数组赋值,需要取出数组中对应的SimpleXMLElement对象再修改值。 - 你提供的XML示例尾部闭合标签存在错误,需将最后的
<Users>修改为</Users>,否则会直接导致XML解析失败。
正确实现代码
<?php $xmlfile = "users.xml"; $xml = simplexml_load_file($xmlfile); if (!$xml) { echo "XML文件解析失败,请检查格式是否正确"; exit; } // 查询user1对应的User节点 foreach ($xml->xpath("User[@Name='user1']") as $user) { // 获取Pass对应的Option节点,修改节点值 $passNode = $user->xpath("Option[@Name='Pass']")[0] ?? null; if ($passNode) { $passNode[0] = '654321'; } } // 回写修改后的内容到文件 if (!$xml->asXML($xmlfile)) { echo "error! \n"; } else { echo "Password Changed."; } ?>
*说明:修改SimpleXMLElement节点值时,通过$node[0]赋值是SimpleXML的标准写法,可直接修改节点的文本内容。
内容的提问来源于stack exchange,提问作者flash
相关产品推荐
相关产品推荐

