Обозначьте теги привязки, которые имеют тег img как дочерний элемент

Мне нужно найти все теги привязки, которые имеют тег img как дочерний элемент. Рассмотрим следующие случаи:

 <a href="test1.php"> <img src="test1.jpg" alt="Test 1" /> </a> <a href="test2.php"> <span> <img src="test2.jpg" alt="Test 2" /> </span> </a> 

Мое требование состоит в том, чтобы сгенерировать список атрибутов href вместе с src и alt т. alt

 $output = array( array( 'href' => 'test1.php', 'src' => 'test1.jpg', 'alt' => 'Test 1' ), array( 'href' => 'test2.php', 'src' => 'test2.jpg', 'alt' => 'Test 2' ) ); 

Как я могу сопоставить вышеуказанные случаи в PHP? (Использование Dom Xpath или любого другого синтаксического анализатора)

Заранее спасибо!

Предполагая, что $doc является DOMDocument представляющим ваш документ HTML:

 $output = array(); $xpath = new DOMXPath($doc); # find each img inside a link foreach ($xpath->query('//a[@href]//img') as $img) { # find the link by going up til an <a> is found # since we only found <img>s inside an <a>, this should always succeed for ($link = $img; $link->tagName !== 'a'; $link = $link->parentNode); $output[] = array( 'href' => $link->getAttribute('href'), 'src' => $img->getAttribute('src'), 'alt' => $img->getAttribute('alt'), ); } 

Предполагая, что ваш HTML является допустимым XML-документом (имеет один корневой узел и т. Д.), Вы можете использовать SimpleXML следующим образом:

 $xml = simplexml_load_file($filename); $items = array(); foreach ($xml->xpath('//a[@href]') as $anchor) { foreach ($anchor->xpath('.//img[@src][@alt]') as $img) { $items[] = array( 'href' => (string) $anchor['href'], 'src' => (string) $img['src'], 'alt' => (string) $img['alt'], ); } } print_r($items); 

Это использует xpath для поиска по документу для всех тегов <a> которые имеют атрибут href . Затем он ищет под каждым тегом <a> найденным для поиска любых тегов <img> которые имеют как теги src и alt . Затем он просто захватывает необходимые атрибуты и добавляет их в массив.

Использовать простой HTML DOM Parser http://simplehtmldom.sourceforge.net/

Вы можете сделать что-то вроде этого (Rough Code, вам нужно будет настроить код, чтобы заставить его работать.):

  //include simple html dom parser $html = file_get_html('your html file here'); foreach($html->find('a') as $data){ $output[]['href']=$data->href; $output[]['src']=$data->src; $output[]['alt']=$data->alt; }