Php 如果xml元素名称相同,如何设置xml属性值更改

Php 如果xml元素名称相同,如何设置xml属性值更改,php,xml,xpath,Php,Xml,Xpath,我有以下XML文件: <root> <SignUp user_id = 'joseph' image = 'myByk.jpg' /> <SignUp user_id = 'jack' image = 'myCar.jpg' /> <SignUp user_id = 'lamp' image = 'myhome.jpg' /> </root> 但是,它似乎不起作用…因为在you's going by属性中,可以有多个结

我有以下XML文件:

<root>
  <SignUp user_id = 'joseph' image = 'myByk.jpg' />
  <SignUp user_id = 'jack' image = 'myCar.jpg' />  
  <SignUp user_id = 'lamp' image = 'myhome.jpg' />
</root>
但是,它似乎不起作用…

因为在you's going by属性中,可以有多个结果元素,所以它被包装在某种类型的列表中

以下是我未经测试的想法:

<?php
    $dom = new DomDocument();
    $dom->load('data_out.xml');
    $xp = new DomXPath($dom);
    $res = $xp->query("//*[@user_id = 'jack']");
    $res->item(0)->setAttribute("image", "my School.jpg");
    $dom->save('data_out.xml');
?>
类似的代码在以下环境中成功测试:

返回

<?xml version="1.0"?>
<root>
    <SignUp user_id="joseph" image="myByk.jpg"/>
    <SignUp user_id="jack" image="my School.jpg"/>  
    <SignUp user_id="lamp" image="myhome.jpg"/>
</root>

也许OP应该考虑使用SimeXML:< /P>

if ($root = simplexml_load_file('xml.xml') ) 
{
    //access attributes like an array:
    echo $root->SignUp[0]["user_id"] . "\n";  

    $target_elements = $root->xpath("//*[@user_id = 'jack']");
    $target_elements[0]["image"] = "mySchool.jpg";
    $root->asXML('datat_out.xml');

}
请注意,要更改属性,不必使用繁琐的:

$target_attr = "image";
$target_elements[0]->attributes()->$target_attr = "hello";

第6行调用未定义的方法DOMXPath::itemright时出现的返回错误现在应该得到修复,因为它取消了对错误变量的引用。是的,这是有效的,但我不使用xml作为字符串。这是为什么?@jackxml,还请注意,您在原始代码中尝试设置的attributes属性是只读的:@7stud我认为这个想法源于jack试图将属性作为方法访问,对于DomNode,它是一个成员。
if ($root = simplexml_load_file('xml.xml') ) 
{
    //access attributes like an array:
    echo $root->SignUp[0]["user_id"] . "\n";  

    $target_elements = $root->xpath("//*[@user_id = 'jack']");
    $target_elements[0]["image"] = "mySchool.jpg";
    $root->asXML('datat_out.xml');

}
$target_attr = "image";
$target_elements[0]->attributes()->$target_attr = "hello";