我有2个SimpleXmlElement实例,例如:
$xmlMain = new SimpleXmlElement('<user><name></name></user>');
$xmlPart = new SimpleXmlElement('<user_details...</user_details>');
我可以在$xmlPart
内的某个地方插入$xmlMain
元素。
我希望结果是在$xmlPart
内注入$xmlMain
实例,所以结果应该是
<user><name><user_details>...</user_details></name></user>
答案 0 :(得分:1)
SimpleXML不能很好地将数据从一个节点复制到另一个节点。您可以改为使用DOMDocument方法,方法是先将SimpleXMLElements导入DOMNodes,然后将第二个节点导入文档中的第一个节点,然后将其附加到name元素...
$xmlMain = new SimpleXmlElement('<user><name></name></user>');
$xmlPart = new SimpleXmlElement('<user_details>...</user_details>');
// Import xmlMain <name> element into a DOMNode
$xmlMD = dom_import_simplexml($xmlMain->name);
// Import xmlPart into DOMNode and then import that node into the xmlMD document
$importedNode = $xmlMD->ownerDocument->importNode(dom_import_simplexml($xmlPart), true);
// Add the imported node into the first node (the <name> element)
$xmlMD->appendChild($importedNode);
echo $xmlMain->asXML();
这将给...
<?xml version="1.0"?>
<user><name><user_details>...</user_details></name></user>
一种可能更简单的替代方法是首先在$xmlPart
文档中创建$xmlMain
元素...
$xmlMain = new SimpleXmlElement('<user><name></name></user>');
$userDetails = $xmlMain->name->addChild("user_details");
$userDetails->addChild("name", "Fred");
echo $xmlMain->asXML();
创建...
<?xml version="1.0"?>
<user><name><user_details><name>Fred</name></user_details></name></user>