使用PHP

时间:2016-08-31 07:27:31

标签: php xml

添加子项时,会抛出此错误: 无法添加孩子。 Parent不是XML树的永久成员。 我无法解决这个问题。 这是我的代码:

 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');
 }

第一次执行时,会创建文件(如果是部分)。否则,部分被执行。它不能添加孩子并且在行中抛出错误:
$ flavor_name = $ flavor-&GT;的addChild($ _ POST [ '参数'] [ 'flavorNa我']);.请帮忙!!

2 个答案:

答案 0 :(得分:0)

第一次,您可以使用示例添加子节点

$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();

和结果

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

答案 1 :(得分:0)

首次运行的XML会生成如下XML:

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

因此,如果您解决问题,可以使用以下内容重现该问题:

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

echo $Topology_Configuration->asXml();

结果:

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

消息有点不对,您只是尝试将元素添加到不存在的元素中。 $Topology_Configuration包含xml元素节点,而不是Topology_Configuration

以下是两种可能的解决方案:

更改XML结构

使用Topology_Configuration作为根元素创建XML。

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

更改对Flavor

的访问权限
$xml = simplexml_load_file($fileName);
$flavor=$xml->Topology_Configuration->Flavor;
$flavor->addChild('abc');