代码之家  ›  专栏  ›  技术社区  ›  Alper

获取带有DOM的DIV(包括子标记)的内容

  •  3
  • Alper  · 技术社区  · 15 年前

    我正在使用dom获取div标记的内容,但内部HTML部分没有显示。 功能是:

    $dom = new DOMDocument;
    libxml_use_internal_errors(true);
    $dom->loadHTMLFile("$url");
    libxml_use_internal_errors(false);
    $xpath = new DOMXPath($dom);
    $divTag = $xpath->query('//div[@id="post"]');
    foreach ($divTag as $val) {
    echo $val->getAttribute('title') . ' - ' . $val->nodeValue . "<br />\n";
    }
    

    如果页面源是(仅用于DIV)

    <div id="post">Some text <img src="..." /> <table>some codes</table></div>
    

    然后函数返回

    "Some text " 
    

    但是我也希望得到所有的HTML元素,比如:

    Some text <img src="..." /> <table>some codes</table>
    

    有什么办法吗?现在谢谢。

    3 回复  |  直到 14 年前
        1
  •  2
  •   bobince    15 年前

    如果您要查找的是domdocument版本 innerHTML 在浏览器dom中,最近的是 saveXML .

    echo $dom->saveXML(val).'<br />\n';
    

    (如果希望它实际显示为文本,请记住htmlspecialchars。)

    这给了你 outerHTML 不过。如果你真的需要 内HTML ,您必须循环遍历元素的每个子节点,并将它们传递给 SaveXML ,然后内爆。

    它只是XML序列化:没有相应的HTML版本。 saveHTML 确实存在,但遗憾的是,只能一次保存整个文档。如果获得遗留HTML很重要,则可以通过传入 LIBXML_NOEMPTYTAG 选择以确保烦人的空标签 <script src="..."></script> 不要破坏浏览器。

        2
  •  0
  •   Tony The Lion    15 年前

    尝试从xpath查询中删除“/”…

    这告诉XPath解析器也要获取所有子节点…您的HTML标记是…

    参考文献: http://www.w3schools.com/XPath/xpath_syntax.asp

    编辑:

    同时检查xpath轴: http://www.w3schools.com/xpath/xpath_axes.asp

        3
  •  0
  •   matt    14 年前

    基本上正如Bobines所说,但是我要补充的是,如果您在PHP中这样做而不在HTML中显示,那么您可以使用输出缓冲来获取内容。

    $divTag = $xpath->query('//div[@id="post"]');
    ob_start();
    foreach ($divTag as $val) {
       echo $dom->saveXML($val);
    }
    $content = ob_get_clean();