为了账号安全,请及时绑定邮箱和手机立即绑定

使用 dom (php) 解析 img 和 html 代码

使用 dom (php) 解析 img 和 html 代码

PHP
回首忆惘然 2021-12-03 15:38:07
我有一个解析 img 和文本的代码。运行php文件中的代码。它只是显示 img src、abc、img src、dfe。而且我的代码不规则。img 标签可能带有链接。我想解析 img 和下一个html。像这样:Array(    [0] => Array        (            [src] => http://www.whatever.com            [text] =>  abc    <br>    <h3>title</h3>    <div class="content">content <a href="link">my link</a></div>        )    [1] => Array        (            [src] => http://goingnowhere.com            [text] =>  def    <br>    <h3>title 2</h3>    <div class="content">content <a href="link">my link</a>    bla bla bla    </div>        ))我怎样才能做到这一点?我目前的代码:<?php $sample_html = '<img src="http://www.whatever.com" alt="" />abc<br><h3>title</h3><div class="content">content <a href="link">my link</a></div><img src="http://goingnowhere.com" alt="">def<br><h3>title 2</h3><div class="content">content <a href="link">my link</a>bla bla bla</div>';$dom = new DOMDocument();$dom->loadHTML($sample_html);$data = array();$images = $dom->getElementsByTagName('img');foreach ($images as $image) {$data[] = array('src' => $image->getAttribute('src'),'text' => trim($image->nextSibling->textContent),);}echo '<pre>';print_r($data); ?>
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

使用 xpath 遍历所有节点并使用两个 img 标签检索数据。


<?php $sample_html = '

<img src="http://www.whatever.com" alt="" />

abc

<br>

<h3>title</h3>

<div class="content">content <a href="link">my link</a></div>

<img src="http://goingnowhere.com" alt="">

def

<br>

<h3>title 2</h3>

<div class="content">content <a href="link">my link</a>


bla bla bla


</div>

';


$dom = new DOMDocument();

@$dom->loadHtml($sample_html);


$xpath = new DOMXPath($dom);


$snippet = '';

$arr = array();

$count = $xpath->query('//img')->length;

//loop through all img tags

for($i=0;$i<$count;$i++){


    $node = $xpath->query('//img')->item($i);

    $img_src = $node->getAttribute('src');//first image src


    while ($node = $node->nextSibling) {


      if (get_class($node) != 'DOMElement') {

        continue;

      }


      if ($node->tagName  == 'img') {

        $snippet .= $dom->saveXML($node);

        $arr[] = array(

            'src'=>$img_src,

            'content'=>$snippet

        );

        $img_src = $node->getAttribute('src');//last img src

        $snippet = '';

        break;

      }

      $snippet .= $dom->saveXML($node);


    }

}

//fill last img data

$arr[] = array('src'=>$img_src,'content'=>$snippet);


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号