php düzenleme xml elemanı

1 Cevap php

Bu düzenlemek istiyorum XML parçasıdır

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

Ben Etkinlik Adı değiştirmek gerekir.

Ben remove_child kullanarak düğümü silmek mümkün duyuyorum. Ama ben aynı noktada başka bir öğe eklemek için nasıl bilmiyorum.

Bu benim kodudur:

   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 Cevap

Bir çözüm, ben doğru soruyu anlamak, sadece düğümünü kaldırmak ve yeni bir tane eklemek için çalışıyor olmadan, $eventNames->item(0)->nodeValue değeri üzerine için olabilir.

Örneğin, kod kullanarak ve biraz değiştirerek bu yüzden bu basit durumda çalışır:

$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());

Beni alacak:

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

Ve Name Event "New name" tarafından değiştirilmiştir arasında değer.