我正在尝试构建一个相当复杂的 XML 文档。
我有一堆重复的 XML 文档部分。我想我会使用多个字符串模板作为这些部分的基础文档,并使用 simplexml_load_string 创建 XML 元素的实例。
所以我有一个 SimpleXMLElement 实例作为基础文档
$root = simplexml_load_string($template_root);
然后我循环遍历数据库中的一些项目,创建新的 SimpleXMLElement,如下所示:
for (bla bla bla):
$item = simplexml_load_string($template_item); // do stuff with item // try to add item to the root document..
// Stuck here.. can't do $root->items->addChild($item)endfor;
我不能调用 addChild,因为它只需要一个标签名称和值。您不能将另一个 SimpleXMLElement 添加到 addChild。
我是不是漏掉了什么? addChild 不能将 SimpleXMLELElement 作为参数似乎真的很愚蠢。
还有其他方法吗? (除了使用不同的 xml 库)
最佳答案
据我所知,您不能使用 SimpleXML 来做到这一点,因为 addChild
不会对元素进行深度复制(通过调用SimpleXMLElement::getName()
).
一种解决方案是改用 DOM:
有了这个功能:
function sxml_append(SimpleXMLElement $to, SimpleXMLElement $from) {
$toDom = dom_import_simplexml($to);
$fromDom = dom_import_simplexml($from);
$toDom->appendChild($toDom->ownerDocument->importNode($fromDom, true));
}
我们有
<?php
header("Content-type: text/plain");
$sxml = simplexml_load_string("<root></root>");
$n1 = simplexml_load_string("<child>one</child>");
$n2 = simplexml_load_string("<child><k>two</k></child>");
sxml_append($sxml, $n1);
sxml_append($sxml, $n2);
echo $sxml->asXML();
输出
<?xml version="1.0"?>
<root><child>one</child><child><k>two</k></child></root>
另请参阅一些使用递归函数和 addChild
的用户评论,例如this one .
关于PHP - SimpleXML - AddChild 与另一个 SimpleXMLElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4778865/