2016-05-06 72 views
0

我想用SimpleXMLElement变量'覆盖'一个孩子。SimpleXML - 将SimpleXML类型的变量分配给子元素?

我的XML是

<data> 
    <ch> 
    <nest>plzoverwritekthx</nest> 
    </ch> 
</data> 

我的PHP尝试:

$DATA=(new SimpleXMLElement("<data><ch><nest>plzoverwritekthx</nest></ch></data>")); 
$DATA->children()[0]->children()[0]=(new SimpleXMLElement("<dragon>x</dragon>")); 
exit($DATA->asXML()) 

预期输出:

<?xml version="1.0"?> 
<data><ch><dragon>x</dragon></ch></data> 

实际输出:

<?xml version="1.0"?> 
<data><ch>x</ch></data> 

我可以防止将新节点转换为字符串吗?

+0

编辑现在包括XML两次... –

+0

是的。一次是缩进和格式良好的形式,另一次是作为字符串包含在PHP代码中。 – zx485

回答

2

SimpleXMLElement类没有replaceChild()overrideChild()方法。所以解决方案是:

  • 首先从XML文档中删除节点<nest>plzoverwritekthx</nest>
  • 然后使用的SimpleXMLElement类的addChild()方法添加适当的节点,<dragon>x</dragon>

所以,你的代码应该是这样的:

$data=<<<XML 
<data> 
    <ch> 
    <nest>plzoverwritekthx</nest> 
    </ch> 
</data> 
XML; 

$xml = new SimpleXMLElement($data); 

// Remove node: <nest>plzoverwritekthx</nest> 
unset($xml->children()[0]->children()[0]); 

// Add node: <dragon>x</dragon> 
$xml->children()[0]->addChild('dragon', 'x'); 

// display 
exit($xml->asXML()); 

输出:

<?xml version="1.0"?> 
<data><ch><dragon>x</dragon></ch></data>