首页 > 解决方案 > SimpleXMLElement - addChild 实例

问题描述

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

标签: phpxml

解决方案


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>

推荐阅读