изменить имя атрибута simpleXML

0

<Root>
...
    <A CHANGE_THIS="Dont_ChengeME">
        <B></B>  
    </A>
...
</Root>

пытаясь изменить имя атрибута элемента A на мой выбор, используя php simpleXML API. вот что я сделал:

$xml = simplexml_import_dom($xmldom);
    $query = "root/A[@]";
    $result = $xml->xpath($query);  
       if(!empty($result))
         $result['CHANGE_THIS'] = "Blalalalal";       //i believe this is where am doing it wrong

Все попытки не удались. Есть идеи?

  • 0
    Вы пытаетесь изменить имя атрибута или его значение?
  • 0
    Вы не можете изменить имя атрибута, удалить атрибут и добавить новый с тем же значением.
Теги:
xpath

2 ответа

0
Лучший ответ

Здесь один из способов сделать это, предполагая, что вы не нуждаетесь в использовании XPath:

<?php
$xml = simplexml_load_file($xmldom);
$result = $xml->{'A'}->attributes();
if(!empty($result)) {
  $preserve_this = $result['CHANGE_THIS'];
  $result->addAttribute('Blalalalal', $preserve_this);
  unset($result['CHANGE_THIS']);
}
  • 0
    Благодарю. Ваш подход сработал и много думал.
0

Вы можете сделать это:

$xml->A['changed_value'] = $xml->A['CHANGE_THIS'];
unset($xml->A['CHANGE_THIS']);

Причина, по которой ваша попытка не срабатывала, заключается в том, что

$result['CHANGE_THIS'] = "Blalalalal";

назначает строку "Blalalala" элементу массива, который индексируется "CHANGE_THIS". Я не знаю более простого способа эффективного изменения индекса для элемента массива, кроме как скопировать элемент в новый элемент с нужным индексом (т.е. 'Changed_value'), а затем отключить исходный элемент массива.

  • 0
    Это должно было быть комментарием к вопросу ОП. Если вы не можете комментировать из-за низкой репутации, то просто наберитесь терпения, пока не наберете достаточно времени, чтобы оставлять комментарии.
  • 0
    проверьте мои изменения выше. Спасибо
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню