2009-12-03 63 views
0

这是我想编辑PHP编辑XML元素

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

我需要修改事件的名称的XML的一部分。

我能够使用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); 
     } 

回答

0

一个解决办法,如果我理解正确的问题,可能是刚刚改写的$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) 

而且EventName的价值已被“New name”取代。

+0

非常感谢你!我知道这是可能的 – Milee 2009-12-03 05:41:54

+0

不客气:-)玩得开心! – 2009-12-03 05:49:33