2015-01-08 2 views
1

изменение SimpleXml имени атрибута

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

пытается изменить имя атрибута элемента А к чему-то мой выбор, используя SimpleXML API PHP. вот что я сделал:

$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

Вы пытаетесь изменить имя атрибута или его значение? – Havelock

+0

Вы не можете изменить имя атрибута, удалить атрибут и добавить новый с тем же значением. – ThW

ответ

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

Это должен был быть комментарий к вопросу ОП. Если вы не можете комментировать из-за низкой репутации, тогда просто будьте терпеливы, пока не наберете достаточно, чтобы отправлять комментарии. – Havelock

+0

проверить мое редактирование выше. спасибо –

+0

@Havelock его имя атрибута, а не значение, которое мне нужно изменить. пожалуйста, дайте мне возможность манипулировать $ result, если сможете. благодаря ! –

Смежные вопросы