【问题标题】:How to get html code of DOMElement node? [duplicate]如何获取 DOMElement 节点的 html 代码? [复制]
【发布时间】: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" 你做的不正确。有很多简单快捷的方法可以做到这一点。
  • @webbandit 我知道有更好的方法。请给我看!
  • 注意:这不是重复的,因为它要求返回 DOMElement 的 html,而不是其他问题中的 DOMDocument,并且这些问题已经有不同的答案。
  • @kenorb 嘿,就是这样。根据定义,现在每个问题都是重复的????

标签: php dom domdocument dom-node


【解决方案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或用例示例
猜你喜欢
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多