2 回答
TA贡献1829条经验 获得超7个赞
SimpleXML 适用于基本事物,但缺乏 DOMDocument 的控制(和复杂性)。
将内容从一个文档复制到另一个文档时,您必须做三件事(对于 SimpleXML),首先是将其转换为 a DOMElement,然后使用importNode()withtrue作为第二个参数将其导入到目标文档中,表示进行深度复制。这只是使其可用于目标文档,而不是实际放置内容。这是使用appendChild()新导入的节点完成的...
// Convert target SimpleXMLElement to DOMElement
$targetImport = dom_import_simplexml($target_body);
foreach ($source_body as $source_child) {
foreach ($source_child as $p) {
// Convert SimpleXMLElement to DOMElement
$sourceImport = dom_import_simplexml($p);
// Import the new node into the target document
$import = $targetImport->ownerDocument->importNode($sourceImport, true);
// Add the new node to the correct part of the target
$targetImport->appendChild($import);
}
}
TA贡献1851条经验 获得超5个赞
该SimpleXMLElement::addChild方法只接受简单的值。但在这种情况下,您正在尝试添加另一个SimpleXMLElement对象。
您可以查看建议使用 DOM 的链接https://stackoverflow.com/a/2356245/6824629
这是官方的函数文档https://www.php.net/manual/en/function.dom-import-simplexml.php fordom_import_simplexml
您的代码应如下所示:
<?php
$target_xml = new DOMDocument('1.0');
$source_body = $source_xml->children($this->namespaces['main']);
foreach ($source_body as $source_child) {
foreach ($source_child as $p) {
$dom_sxe = dom_import_simplexml($p);
// don't forget to handle your errors
$target_xml->appendChild($dom_sxe);
}
}
//you get back your target xml here
echo $target_xml->saveXML();
- 2 回答
- 0 关注
- 261 浏览
添加回答
举报