gpt4 book ai didi

php - 将 DOMDocument 根元素附加到另一个 DOMDocument

转载 作者:行者123 更新时间:2023-12-02 21:25:05 26 4
gpt4 key购买 nike

我有 2 个“DOMDocument”对象 - $original 和 $additional。我想要的是从 $additional DOMDocument 中获取所有子级并将其附加到 $original 文档的末尾。

我的计划是获取 $additional 文档的 root 元素。我尝试使用:

$root = $additional->documentElement;
$original->appendChild($root)

但是我收到错误,appendChild 期望 DOMNode 对象作为参数。我尝试通过以下方式访问文档的每个子项:

$additional->childNodes->item(0);

但它返回 DOMElement 对象。你能建议如何获取 DOMNode 类的对象吗?提供此导入操作的最便捷方式是什么?

$原始 XML 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Product>
<RecordReference>345345</RecordReference>
<NotificationType>03</NotificationType>
<NumberOfPages>100</NumberOfPages
</Product>

$额外的 XML 看起来像:

<?xml version="1.0" encoding="utf-8"?>
<MainSubject>
<SubjectScheme>10</SubjectScheme>
</MainSubject>

我想要的:

<?xml version="1.0" encoding="utf-8"?>
<Product>
<RecordReference>345345</RecordReference>
<NotificationType>03</NotificationType>
<NumberOfPages>100</NumberOfPages>
<MainSubject>
<SubjectScheme>10</SubjectScheme>
</MainSubject>
</Product>

最佳答案

DOMElement 是 DOMNode,DOMNode 是父类(super class)。下面是元素、文本和其他节点的几个子类。只需迭代、导入并附加它们即可。

$targetDom = new DOMDocument();
$targetDom->loadXML('<root/>');

$sourceDom = new DOMDocument();
$sourceDom->loadXml('<items><child/>TEXT</items>');

foreach ($sourceDom->documentElement->childNodes as $child) {
$targetDom->documentElement->appendChild(
$targetDom->importNode($child, TRUE)
);
}

这也适用于文档元素。

$targetDom = new DOMDocument();
$targetDom->loadXML('<root/>');

$sourceDom = new DOMDocument();
$sourceDom->loadXml('<items><child/>TEXT</items>');

$targetDom->documentElement->appendChild(
$targetDom->importNode($sourceDom->documentElement, TRUE)
);

echo $targetDom->saveXml();

DOMDocument::importNode() 在文档上下文中创建所提供节点的副本。只有属于文档的节点才能附加到该文档。

关于php - 将 DOMDocument 根元素附加到另一个 DOMDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com