获取下一个兄弟节点值/文本返回空字符串
Posted
技术标签:
【中文标题】获取下一个兄弟节点值/文本返回空字符串【英文标题】:getting next sibling node value/text returns empty string 【发布时间】:2021-10-03 11:24:59 【问题描述】:我试图从某个 url 获取数据,这个 url 包含一堆 h3
标签,每个标签后跟一个 p
标签....我想循环抛出 h3 标签,打印每个标签并跳转下一个元素 ( p ) 并打印出来....基本上我想打印 h3=>p
对
$doc = new \DOMDocument('1.0', 'UTF-8');
$prologue = '<?xml encoding="UTF-8">';
$doc->loadhtml($prologue.$page);
$finder = new \DOMXPath($doc);
$nodes = $finder->query("//*[contains(@class, 'td-post-content td-pb-padding-side')]");
$hList = $nodes[0]->getElementsByTagName('h3');
foreach ($hList as $k=>$h )
$text = $h->nodeValue ;
dump( 'h3->' , $text);
$p = $h->nextSibling ;
dump( 'p->' , $p->nodeValue);
这是一个示例链接
https://unludetay.com/2020/01/timothee-chalamet-kac-kilo-boyu-kac-nereli-kac-yasinda-sevgilisi-kimdir.html
这是我的输出
你可以看到 p 标签由于某种原因是一个空字符串,但是在源代码中你可以看到下一个元素(p)及其值/文本
【问题讨论】:
$p = $h->nextSibling
正在访问存在于在 h3
和p
元素之间的空白文本节点。这与 JS 中的客户端 DOM 实现基本相同:developer.mozilla.org/en-US/docs/Web/API/Node/nextSibling#notes
【参考方案1】:
感谢@CBroe 的评论,我是这样做的
$hList = $nodes[0]->getElementsByTagName('h3');
foreach ($hList as $k=>$h )
$h_text = $h->nodeValue ;
dump($h_text);
$current_el = $h ;
$current_nodeName = $current_el->nodeName ;
while ($current_nodeName != 'p')
$current_el = $current_el->nextSibling ;
$current_nodeName = $current_el->nodeName ;
$p_text = $current_el->nodeValue;
dd($p_text);
【讨论】:
以上是关于获取下一个兄弟节点值/文本返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章