获取下一个兄弟节点值/文本返回空字符串

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-&gt;nextSibling 正在访问存在于 h3p 元素之间的空白文本节点。这与 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);
        

【讨论】:

以上是关于获取下一个兄弟节点值/文本返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章

数据处理函数

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

105 - 获取模型列表

如何从 RPC 调用返回空字符串?

如何在没有编译器警告的情况下返回对空字符串的 const 引用?