PHP-элемент редактирования XML - PullRequest
0 голосов
/ 03 декабря 2009

Это часть XML, которую я хочу редактировать

<ScrapBook>
  <Event>
   <Name> Name of Event <Name>
   <Other Elements>
  </Event>
<ScrapBook>

Мне нужно изменить название события.

Я могу удалить узел, используя remove_child. Но я не знаю, как добавить еще один элемент в том же месте.

Это мой код:

   public function editEventName($oldEventName, $newEventName){
        $xmlDoc = new DOMDocument();
        $xmlDoc->load($this->xmlFileName);
        $events = $xmlDoc->getElementsByTagName("Event");
        foreach($events as $event){
            $eventNames = $event->getElementsByTagName("Name");
            $eventN = $eventNames->item(0)->nodeValue;
            if($oldEventName == $eventN){
                $nud = $eventNames->item(0)->parentNode;
                $nud->removeChild($eventNames->item(0));

                // set name to $newEventName
            }
            $xmlDoc->saveXML();
    $xmlDoc->save($this->xmlFileName);
        }

1 Ответ

0 голосов
/ 03 декабря 2009

Решение, если я правильно понимаю вопрос, может заключаться в том, чтобы просто перезаписать значение $eventNames->item(0)->nodeValue, не пытаясь удалить узел и добавить новый.

Например, используя ваш код и немного изменив его, чтобы он работал для этого более простого случая:

$str = <<<XML
<ScrapBook>
  <Event>
   <Name> Name of Event </Name>
   <Blah>glop glop</Blah>
  </Event>
</ScrapBook>
XML;

$xmlDoc = new DOMDocument();
$xmlDoc->loadXml($str);
$events = $xmlDoc->getElementsByTagName("Event");
foreach($events as $event){
    $eventNames = $event->getElementsByTagName("Name");
    $eventN = $eventNames->item(0)->nodeValue;
    if(' Name of Event ' == $eventN){
        $eventNames->item(0)->nodeValue = 'New name';
    }
}
var_dump($xmlDoc->saveXML());

достанет мне:

string '<?xml version="1.0"?>
<ScrapBook>
  <Event>
   <Name>New name</Name>
   <Blah>glop glop</Blah>
  </Event>
</ScrapBook>
' (length=119)

И значение Name для Event было заменено на "New name".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...