SimpleXML - 将SimpleXML类型的变量分配给子元素?

时间:2016-05-06 13:12:30

标签: php xml simplexml

我正试图用一个SimpleXMLElement变量'覆盖'一个孩子。

我的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>

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

1 个答案:

答案 0 :(得分: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>