【发布时间】:2016-03-21 16:00:53
【问题描述】:
我有一个DomElement,但遗憾的是它没有DomDocument 拥有的saveXML() 方法。
我正在尝试获取 DomElement 的原始 XML 字符串表示形式。
我该怎么做?
【问题讨论】:
标签: php xml domdocument
我有一个DomElement,但遗憾的是它没有DomDocument 拥有的saveXML() 方法。
我正在尝试获取 DomElement 的原始 XML 字符串表示形式。
我该怎么做?
【问题讨论】:
标签: php xml domdocument
DomElement 具有其DomDocument 的属性,即ownerDocument。
因此您可以通过以下方式获取 DomElement 的 XML:
$domElementXml = $domElement->ownerDocument->saveXML($domElement);
您必须再次传递节点,因为ownerDocument 指的是整个文档。因此,运行 $domElement->ownerDocument->saveXML() 将获取文档的整个 XML,其中也可能包含不同的 DomElement 对象。
【讨论】:
这扩展了 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 上进行测试。
【讨论】: