PHP - SimpleXML - AddChild 与另一个 SimpleXMLElement

标签 php simplexml

我正在尝试构建一个相当复杂的 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/

相关文章:

PHP 7 simpleXML fatal error

php - 如何在 PHP 中编码多字节文件名并在 javascript 中解码它们?

php - 无法使用PHP的shell_exec执行powershell脚本功能

php - 使用 PHP、simplexml_load_file 和 Xpath 从 XML 文件返回唯一值

php - SimpleXML 解析嵌套命名空间 - PHP

php - 为什么 var_dump() 说字符串是对象?

php - 数据库中的空值问题

php - 将自己的断言添加到 phpUnit 时组织参数的最佳方式

php - Symfony - 使用命令运行 Phing 任务

php - 使用命名空间选择属性值的 XPath