使用PHP将子文件添加到XML文件

While adding child, this error is thrown : Cannot add child. Parent is not a permanent member of the XML tree. I cannot resolve this. This is my code :

 if($visited=='FIRST')
 {
 $xml=new SimpleXMLElement("<xml/>");
 $topology=$xml->addChild("Topology_Configuration");
 $flavor=$topology->addChild("Flavor");
 $networks=$topology->addChild("Networks");
 $vms=$topology->addChild("VMs");
 $vnfs=$topology->addChild("VNFs");
 $xml->asXML('saddening.xml');
 }
 else
 {
   $xml= simplexml_load_file('saddening.xml');
   $Topology_Configuration = new SimpleXMLElement($xml->asXML());
   $vmcount=$_POST['arguments']['vmcount'];
   $flavor=$Topology_Configuration->Flavor;
   $flavor_name=$flavor->addChild($_POST['arguments']['flavorName']);
   $Topology_Configuration->asXML('saddening.xml');
 }

When it is executed for the first time, the file is created(in if part). Otherwise else part is executed. It cannot add the child and is throwing the error in line :
$flavor_name=$flavor->addChild($_POST['arguments']['flavorNa‌​me']);. Please help!!

At the first time, you can use example to add child nodes

$new_xml = new SimpleXMLElement("<root></root>");
$new_xml->addAttribute('newAttr', 'value');
$newsIntro = $new_xml->addChild('content');
$newsIntro->addAttribute('type', 'value');
Header('Content-type: text/xml');
echo $new_xml->asXML();

and result

<?xml version="1.0"?>
<news newAttr="value">
    <content type="value"/>
</news

The XML from your first run results in an XML like this:

<?xml version="1.0"?>
<xml>
  <Topology_Configuration>
    <Flavor/>
    <Networks/>
    <VMs/><VNFs/>
  </Topology_Configuration>
</xml>

So if you strip down the problem you can reproduce it with:

$Topology_Configuration = simplexml_load_file($fileName);
$flavor=$Topology_Configuration->Flavor;
$flavor->addChild('abc');

echo $Topology_Configuration->asXml();

Results in:

Warning: SimpleXMLElement::addChild(): Cannot add child. 
Parent is not a permanent member of the XML tree in

The message is a little wrong, you just try to add the element to an element that does not exists. $Topology_Configuration contains the xml element node, not the Topology_Configuration.

Here are two possible solutions:

Change the XML structure

Create the XML with the Topology_Configuration as the root element.

$topology =new SimpleXMLElement("<Topology_Configuration/>");

Change the access to the Flavor

$xml = simplexml_load_file($fileName);
$flavor=$xml->Topology_Configuration->Flavor;
$flavor->addChild('abc');