Как изменить значение атрибута xml-узла с помощью php?

#php #xml

Вопрос:

Как изменить значение атрибута XML-узла с помощью PHP? Я немного пытался, но не мог понять, вы можете мне помочь?

Я хочу изменить пароль пользователя 1.

 <Users>
                    <User Name="user1">
                        <Option Name="Pass">123456</Option>
                        <Option Name="fname">first name</Option>
                        <Option Name="lname">last name</Option>
                    </User>
                    <User Name="user2">
                        <Option Name="Pass">123456</Option>
                        <Option Name="fname">first name</Option>
                        <Option Name="lname">last name</Option>
                    </User>
     <Users>
 

Php-код:

 $xmlfile = "users.xml";
$xml = simplexml_load_file($xmlfile);
$xml->asXML($xmlfile);

foreach( $xml->Users->xpath("User [@Name='user1']") as $t ) {
  $t->xpath("Option[@Name='Pass']") = '654321';
}

if(!$rv = $xml->asXML($xmlfile)){
      $mesaj = 'error! n ';
      echo $mesaj;
}    else {
    echo "Password Changed.";
}
 

Ответ №1:

На самом деле вам не нужно foreach , если у вас есть только один целевой пользователь. Попробуйте изменить

 foreach( $xml->Users->xpath("User [@Name='user1']") as $t ) {
  $t->xpath("Option[@Name='Pass']") = '654321';
}
 

Для

 $target = $xml->xpath('//User[@Name="user1"]/Option[@Name="Pass"]')[0];
$target[0]="654321";
echo($xml->asXml());
 

и посмотрим, сработает ли это.

Комментарии:

1. спасибо, хорошая работа 😉

2. @flash Рад, что это сработало для вас!