سؤال
هذا جزء من 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
".
لا تنتمي إلى StackOverflow