在 PHP 中从 DOMNode 创建 DOMDocument

Posted

技术标签:

【中文标题】在 PHP 中从 DOMNode 创建 DOMDocument【英文标题】:Creating a DOMDocument from a DOMNode in PHP 【发布时间】:2011-01-15 02:54:17 【问题描述】:

我从某个来源获得了一个 XML 字符串。我创建了一个 DOMDocument 对象并将 XML 字符串加载到其中(使用 DOMDocument::loadXML())。然后我使用各种方法(例如 DOMXPath)浏览 XML 文档,直到找到我想要的节点(当然是 DOMNode)。

这个节点有一堆后代,我想获取整个节点(及其后代)并从中创建一个新的 DOMDocument 对象。我不知道该怎么做;我尝试创建一个新的 DOMDocument 并使用 DOMDocument::importNode(),但这似乎只有在 DOMDocument 中已经有一个主文档节点时才有效,在这种情况下,它将导入的节点作为主文档节点的子节点附加,这不是我想要的——我希望导入的节点成为 DOMDocument 主节点。

也许有一种更简单的方法可以做到这一点(即一种更简单的方法来提取我想要转换为自己的文档的原始 XML 部分),但我不知道。我对 DOMDocument 比较陌生,虽然我使用过 SimpleXMLElement 足以让我感到厌烦。

【问题讨论】:

【参考方案1】:

您也可以创建一个新的 DOMDocument 并在其上调用 appendChild() 来添加一个根节点:

$new = 新的 DomDocument; $new->appendChild($new->importNode($node, true));

这对我有用。

【讨论】:

【参考方案2】:

你不能只创建一个新的 DOMDocument 并加载节点的 XML 吗?

$new = new DOMDocument;
$new->loadXML($node->ownerDocument->saveXML($node));

我现在无法尝试,但应该可以。

【讨论】:

这应该可以,但会涉及到importNode() 避免的序列化和重新解析 XML 代码。

以上是关于在 PHP 中从 DOMNode 创建 DOMDocument的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 插入 PHP DOMNode?

用 PHP 的 DOM 类替换 DOMNode

在 PHP 中从文本创建图像 - 如何制作多行?

在 PHP 中从数组键创建新变量

如何在 PHP 中从具有 2 个计数的数组创建 2 个集合?

如何在 php 中从 BLOB 创建/保存文件?