Мне нужно найти все теги привязки, которые имеют тег 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; }