如何获取 DOMElement 节点的 html 代码? [复制]
Posted
技术标签:
【中文标题】如何获取 DOMElement 节点的 html 代码? [复制]【英文标题】:How to get html code of DOMElement node? [duplicate] 【发布时间】:2012-10-06 06:18:42 【问题描述】:我有这个 html 代码:
<html>
<head>
...
</head>
<body>
<div>
<div class="foo" data-type="bar">
SOMECONTENTWITHMORETAGS
</div>
</div>
</body>
我已经可以使用这个函数获取“foo”元素(但只有它的内容):
private function get_html_from_node($node)
$html = '';
$children = $node->childNodes;
foreach ($children as $child)
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
$html .= $tmp_doc->saveHTML();
return $html;
但我想返回 DOMElement 的所有 html 标签(包括它的属性)。我该怎么做?
【问题讨论】:
如果你想得到html_from_node
class="foo"
你做的不正确。有很多简单快捷的方法可以做到这一点。
这有用吗? ***.com/questions/6366351/…
@webbandit 我知道有更好的方法。请给我看!
注意:这不是重复的,因为它要求返回 DOMElement 的 html,而不是其他问题中的 DOMDocument,并且这些问题已经有不同的答案。
@kenorb 嘿,就是这样。根据定义,现在每个问题都是重复的????
【参考方案1】:
使用DOMDocument::saveHTML
的可选参数:这表示“仅输出此元素”。
return $node->ownerDocument->saveHTML($node);
请注意,该参数仅适用于 php 5.3.6。在此之前,您需要改用DOMDocument::saveXML
。结果可能略有不同。此外,如果您已经参考了该文档,则可以这样做:
$doc->saveHTML($node);
【讨论】:
这实际上是我需要的,但它适用于 WordPress 插件,它应该适用于 3.4 版,而这个版本需要 php 5.2.4。 @revaxarts 然后使用saveXML
。输出会有点不同...
你指给我一个完整的例子?我在函数中没有对文档的引用,只有节点和 DOMDocument::saveXML($node)
与 $node->saveXML($node)
工作不一样
@revaxarts 您需要的代码是$node->ownerDocument->saveXML($node)
。
我不能发布完整的代码作为答案,但这个答案是不正确的。这是工作代码:gist.github.com/komlenic/1374083【参考方案2】:
PHP Simple HTML DOM Parser 应该可以胜任!
【讨论】:
下次至少提供一个sn-p或用例示例以上是关于如何获取 DOMElement 节点的 html 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
模块“domhandler”没有导出的成员“DomElement”。您的意思是改用“从“domhandler”导入 DomElement”吗?