<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
Все попытки не удались. Есть идеи?
Здесь один из способов сделать это, предполагая, что вы не нуждаетесь в использовании 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']);
}
Вы можете сделать это:
$xml->A['changed_value'] = $xml->A['CHANGE_THIS'];
unset($xml->A['CHANGE_THIS']);
Причина, по которой ваша попытка не срабатывала, заключается в том, что
$result['CHANGE_THIS'] = "Blalalalal";
назначает строку "Blalalala" элементу массива, который индексируется "CHANGE_THIS". Я не знаю более простого способа эффективного изменения индекса для элемента массива, кроме как скопировать элемент в новый элемент с нужным индексом (т.е. 'Changed_value'), а затем отключить исходный элемент массива.