想要使用xpath来解析html内容, PHP自带两个对象
DOMDocument,DOMXpath,其中初始化 loadHtml一般都会报很多警告,但是并不影响使用,用@屏蔽错误。
/** * 初始化DOMXpath对象 * * @param [type] $content 网页内容 * @param [array] $pathinfo 匹配信息 * * @return void */ private function _createXpathObj($content, $patinfo) { // 如果没有xpath配置项,不初始化xpath if (!$this->_existsXpathParse($patinfo)) { return; } try { $dom = new \DOMDocument(); @$dom->loadHtml($content); $dom->normalize(); $xpath = new \DOMXpath($dom); $this->xpathObj = $xpath; } catch (\Exception $e) { getService('logger')->warning('Parse html fail', ['content' => $content]); } }
其中 $node 为 DOMElement 对象。
/** * 获取Xpath解析值 * * @param [type] $pat 匹配模式 * * @return string */ private function _getXpathField($pat) { $objs = $this->xpathObj->query($pat); if ($objs->length > 0) { $node = $objs->item(0); $outerHTML = $node->ownerDocument->saveHTML($node); return trim($outerHTML); # 作为示例 输出innerhtml //$innerHTML = ''; //foreach ($node->childNodes as $childNode){ // $innerHTML .= $childNode->ownerDocument->saveHTML($childNode); //} //return $innerHTML; # 作为示例 输出文本不含标签 //return $node->textContent; //$node->nodeValue; } return ''; }
示例
<?php $dom = new DOMDocument('1.0','UTF-8'); $dom->loadHTML('<html><body><div><p>p1</p><p>p2</p></div></body></html>'); $node = $dom->getElementsByTagName('div')->item(0); $outerHTML = $node->ownerDocument->saveHTML($node); $innerHTML = ''; foreach ($node->childNodes as $childNode){ $innerHTML .= $childNode->ownerDocument->saveHTML($childNode); } echo '<h2>outerHTML: </h2>'; echo htmlspecialchars($outerHTML); echo '<h2>innerHTML: </h2>'; echo htmlspecialchars($innerHTML); ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持站长技术。
as3代码: var str = ""; var reg = /(\d{}) \/gx; // \ 即为反向分组,代表前一...
之前活动抽奖获得的几个树莓派,手痒自己玩了下,觉得这个东西确实很香,比一般...
Linux Mint 无疑是 最适合初学者的 Linux 发行版之一 。尤其是对于刚刚迈向 Linu...
前提 在讲述这两个握手时候,有一些东西需要提前说明。 HTTP与TCP/IP区别? TPC/...
公司使用的markdown解析类库一直有一些解析上的问题,最近给fix了。而markdown解...
CKeditor,以前叫FCKeditor,已经使用过好多年了,功能自然没的说。最近升级到3....
9月18日,在2020云栖大会上,中国邮政高管在演讲中透露,通过引入阿里云云原生分...
准备 安装好python环境的电脑若未安装python环境可参照 https://blog.csdn.net/u...
截至最近,加密货币热潮席卷整个互联网社区。人们发现,不需要一个价值数千美元...
使用Ajax可以异步获取数据,可以更高效地渲染页面。 但也存在这一些问题: 再刷...