如何获取 DomElement 的字符串?

Posted

技术标签:

【中文标题】如何获取 DomElement 的字符串?【英文标题】:How to get string for a DomElement? 【发布时间】:2016-03-21 16:00:53 【问题描述】:

我有一个DomElement,但遗憾的是它没有DomDocument 拥有的saveXML() 方法。

我正在尝试获取 DomElement 的原始 XML 字符串表示形式。

我该怎么做?

【问题讨论】:

【参考方案1】:

DomElement 具有其DomDocument 的属性,即ownerDocument

因此您可以通过以下方式获取 DomElement 的 XML:

$domElementXml = $domElement->ownerDocument->saveXML($domElement);

您必须再次传递节点,因为ownerDocument 指的是整个文档。因此,运行 $domElement->ownerDocument->saveXML() 将获取文档的整个 XML,其中也可能包含不同的 DomElement 对象。

【讨论】:

你肯定很快就想到了! @miken32 其实我没有【参考方案2】:

这扩展了 k0pernikus answer 并包括一个 SimpleXMLElement 变体。它适用于任何随机 DOM 元素,而无需转储文档 XML:

<?php

$outerXmlAsString = $yourDomElementGoesHere
    ->ownerDocument
    ->saveXML($yourDomElementGoesHere);

// or

$outerXmlAsString = simplexml_import_dom($yourDomElementGoesHere)
    ->asXML();

例子:

<?php

$doc = new DOMDocument('1.0','utf-8');
$root = new DOMElement('root');
$doc->appendChild($root);
$child = new DOMElement('child');
$root->appendChild($child);
$leaf = new DOMElement('leaf','text');
$child->appendChild($leaf);

echo $child->ownerDocument->saveXML($child), PHP_EOL;
echo simplexml_import_dom($child)->asXML(), PHP_EOL;

示例输出:

<child><leaf>text</leaf></child>
<child><leaf>text</leaf></child>

在3v4l.org 上进行测试。

【讨论】:

以上是关于如何获取 DomElement 的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法获取 DOMElement 的所有属性?

PHP:DomElement->getAttribute

DOMElement 类的对象无法转换为字符串

如何从 jQuery 选择器中获取 DOM 元素?

[JS DOM&BOM]DOM获取元素

three.js 给模型添加标注