note 69729 modified in function.simplexml-element-addchild by danbrown

From: Date: Fri, 28 Nov 2008 22:33:16 +0000
Subject: note 69729 modified in function.simplexml-element-addchild by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-147355@lists.php.net to get a copy of this message
Because SimpleXML transforms the values & to & whe reading from file or string, the values becomes invalid for use when adding childs later on. This simple conversion to the example above fixes this problem. <?php class XMLElement extends SimpleXMLElement { public function addElement (SimpleXMLElement $xmlTree,$root=false) { if($root) { $child = $this->addChild ($xmlTree->getName()); foreach ($xmlTree->attributes() as $k => $v) { $child->addAttribute($k,$v); } $child->addElement($xmlTree); } else { foreach ($xmlTree as $childName => $childTree) { $child = $this->addChild($childName,$this->fix_content((string) $childTree)); // this is not comletely correct foreach ($childTree->attributes() as $k => $v) { $child->addAttribute($k,$v); } $child->addElement($childTree->children()); } } } #When the xml is read by simplexml_load_file or simplexml_load_file the values that contains & is converted to &. And then it is not possible to add these values without getting errors. #THis function should fix this public function fix_content($value) { return str_replace('&', '&', $value); } } ?> --was-- Because SimpleXML transforms the values &amp; to & whe reading from file or string, the values becomes invalid for use when adding childs later on. This simple conversion to the example above fixes this problem. class XMLElement extends SimpleXMLElement { public function addElement (SimpleXMLElement $xmlTree,$root=false) { if($root) { $child = $this->addChild ($xmlTree->getName()); foreach ($xmlTree->attributes() as $k => $v) { $child->addAttribute($k,$v); } $child->addElement($xmlTree); } else { foreach ($xmlTree as $childName => $childTree) { $child = $this->addChild($childName,$this->fix_content((string) $childTree)); // this is not comletely correct foreach ($childTree->attributes() as $k => $v) { $child->addAttribute($k,$v); } $child->addElement($childTree->children()); } } } #When the xml is read by simplexml_load_file or simplexml_load_file the values that contains &amp; is converted to &. And then it is not possible to add these values without getting errors. #THis function should fix this public function fix_content($value) { return str_replace('&', '&amp;', $value); } } http://php.net/manual/en/function.simplexml-element-addchild.php

« previous php.notes (#147355) next »