我使用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>
有什么办法吗?谢谢你。
答案 0 :(得分:2)
如果您在浏览器DOM中查找innerHTML
的DOMDocument版本,则最近的版本为saveXML
。
echo $dom->saveXML(val).'<br />\n';
(如果您希望实际显示为文本,请记住htmlspecialchars。)
这会给你outerHTML
。如果你真的需要innerHTML
,你必须遍历每个元素的子节点并将它们传递给saveXML
,然后将它们内爆。
它只是XML序列化:没有相应的HTML版本。 saveHTML
确实存在,但遗憾的是,它只能立刻保存整个文档。如果你得到遗留HTML很重要,你可以通过传递LIBXML_NOEMPTYTAG
选项来避免它,以确保像<script src="..."></script>
这样烦人的空标记不会破坏浏览器。
答案 1 :(得分:0)
尝试从Xpath Query中删除'//'...
这告诉XPath解析器然后也获取所有子节点......你的HTML标签是......
参考:http://www.w3schools.com/XPath/xpath_syntax.asp
编辑:
同时检查XPath Axes:http://www.w3schools.com/xpath/xpath_axes.asp
答案 2 :(得分:0)
基本上是什么bobince说,但我补充说你可以使用输出缓冲来获取内容,如果你在PHP中这样做而不在html中显示它。
$divTag = $xpath->query('//div[@id="post"]');
ob_start();
foreach ($divTag as $val) {
echo $dom->saveXML($val);
}
$content = ob_get_clean();