![](/img/trans.png)
[英]Editing new attribute to XML element using DOMDocument in PHP
[英]php editing xml element
这是我要编辑的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)
Event
Name
的值已被“ New name
”替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.