如何获取 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-&gt;saveXML($node) 工作不一样 @revaxarts 您需要的代码是$node-&gt;ownerDocument-&gt;saveXML($node) 我不能发布完整的代码作为答案,但这个答案是不正确的。这是工作代码:gist.github.com/komlenic/1374083【参考方案2】:

PHP Simple HTML DOM Parser 应该可以胜任!

【讨论】:

下次至少提供一个sn-p或用例示例

以上是关于如何获取 DOMElement 节点的 html 代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP:DomElement->getAttribute

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

DOMElement 替换 HTML 值

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

模块“domhandler”没有导出的成员“DomElement”。您的意思是改用“从“domhandler”导入 DomElement”吗?

React - 从子 DOM 元素获取 React 组件?