我正在尝试构建一个相当复杂的 XML 文档。
我的 XML 文档中有很多重复的部分。我想我应该使用多个字符串模板作为这些部分的基础文档,并使用 simplexml_load_string 创建 XML 元素的实例。
所以我有一个 SimpleXMLElement 实例作为基础文档
$根=
simplexml_load_string($template_root);
然后我循环访问数据库中的一些项目,创建新的 SimpleXMLElement,如下所示:
对于(布拉布拉布拉):
$item = simplexml_load_string($template_item);
// 对 item 做一些事情
// 尝试将项目添加到根文档..
// 卡在这里.. 无法执行 $root->items->addChild($item)
endfor;
我无法调用 addChild,因为它只需要标签名称和值。您无法 addChild 另一个 SimpleXMLElement。
我在这里错过了什么吗? addChild 不能将 SimpleXMLELement 作为参数,这似乎很愚蠢。
还有其他方法可以做到这一点吗? (除了使用不同的 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
, e.g. this one http://pt.php.net/manual/en/ref.simplexml.php#91561.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)