如何使用PHP DOM XPath获取匹配节点自身及内部完整HTML内容?
实现方法
你可以直接使用DomDocument类自带的saveHTML()方法实现需求,该方法支持传入指定DOM节点作为参数,直接返回该节点包含标签、属性、子元素在内的完整HTML内容,替代你之前使用nodeValue拿纯文本的逻辑即可。
修改后可直接运行的代码
$dom = new DomDocument('1.0', 'UTF-8'); $str = file_get_contents("StudentList.html"); if ($dom->loadHTML(mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8')) == true) { $xpath = new DomXPath($dom); $nodeList = $xpath->query("//div[@class='tableHeader']"); $node = $nodeList->item(0); // 输出完整节点HTML echo $dom->saveHTML($node); }
额外说明
如果按照你给出的预期输出需要排除<div class="studentRow"></div>部分,你可以调整XPath查询规则直接匹配<div class="header">的父节点,或者先移除tableHeader节点下的studentRow子节点后再输出HTML:
// 移除不需要的studentRow节点示例 $studentRow = $xpath->query("./div[@class='studentRow']", $node)->item(0); $node->removeChild($studentRow); echo $dom->saveHTML($node);
注意:
saveHTML()传入节点参数的特性需要PHP 5.3.6及以上版本支持,目前主流运行环境均满足该版本要求。
内容的提问来源于stack exchange,提问作者i need help
相关产品推荐
相关产品推荐

