PHP - SimpleXML - AddChild 与另一个 SimpleXMLElement
我正在尝试构建一个相当复杂的 XML 文档。
我的 XML 文档中有很多重复的部分。我想我应该使用多个字符串模板作为这些部分的基础文档,并使用 simplexml_load_string 创建 XML 元素的实例。
所以我有一个 SimpleXMLElement 实例作为基础文档
$根= simplexml_load_string($template_root);
然后我循环访问数据库中的一些项目,创建新的 SimpleXMLElement,如下所示:
对于(bla bla bla):
$item = simplexml_load_string($template_item); // 对 item 做一些事情 // 尝试将项目添加到根文档..
// 卡在这里.. 无法执行 $root->items->addChild($item)结束;
我无法调用 addChild,因为它只需要标签名称和值。您无法 addChild 另一个 SimpleXMLElement。
我在这里错过了什么吗? addChild 不能将 SimpleXMLELement 作为参数,这似乎很愚蠢。
还有其他方法可以做到这一点吗? (除了使用不同的 xml 库)
I'm trying to build a rather complex XML document.
I have a bunch of sections of the XML document that repeats. I thought I'd use multiple string templates as base document for the sections and create instances of XML elements using simplexml_load_string.
So I have one instance of SimpleXMLElement as the base document
$root =
simplexml_load_string($template_root);
then I loop through some items in my database, create new SimpleXMLElement, something like this:
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;
I can't call addChild because it just expects a tag name and value.. you can't addChild another SimpleXMLElement.
Am I missing something here? seems really dumb that addChild can't take a SimpleXMLELement as a parameter.
Is there any other way to do this? (apart from using a different xml lib)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
据我所知,你不能使用 SimpleXML 来做到这一点,因为
addChild
不会对元素进行深层复制(需要指定标签名称可以通过调用轻松克服) SimpleXMLElement::getName()
)。一种解决方案是使用 DOM:
使用此函数:
我们的
输出
另请参阅一些使用递归函数和
addChild
的用户评论,例如 这个。As far as I know, you can't do it with SimpleXML because
addChild
doesn't make a deep copy of the element (being necessary to specify the tag name can easily be overcome by callingSimpleXMLElement::getName()
).One solution would be to use DOM instead:
With this function:
We have for
the output
See also some user comments that use recursive functions and
addChild
, e.g. this one.您可以使用此函数,该函数基于使用源中的属性创建子项:
这将产生:
You could use this function that is based in creating the children with attributes from the source:
This will produce:
xml_adopt() 示例不保留命名空间节点。
我的编辑被拒绝了,因为它改变太多了?是垃圾邮件吗?
这是保留命名空间的 xml_adopt() 版本。
(编辑:添加示例)
The xml_adopt() example doesn't preserve namespace nodes.
My edit was rejected because it changed to much? was spam?.
Here is a version of xml_adopt() that preserves namespaces.
(edit: example added)