سؤال

هذا جزء من 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);
        }
هل كانت مفيدة؟

المحلول

حل، إذا فهمت السؤال بشكل صحيح، قد يكون مجرد الكتابة فوق قيمة $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".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top