2016-09-22 3 views
1

У меня есть функция для захвата изображений srcатрибут в теге section. но он дает мне изображения src из этот указанный тег раздела (выбран class).

Переключатель xPath не работает правильно

$doc = new DOMDocument(); 
@$doc->loadHTMLFile('http://www.akairan.com/health/bimari-behdasht/news201691911413397586.html'); 

$finder = new DomXPath($doc); 
$imgNodes = $finder->query('//article[@class="contentpaneopen_text"]//img/@src'); 

$images = array(); 
foreach($imgNodes as $node) { 
    echo $node->nodeValue . "<br />"; 
} 

Результат:

http://cdn64.akairan.com/files/images/20160919/20169/2016919114132436510a.jpg 
http://cdn2.akairan.com/akairan/telegram.jpg 
http://ser8.akairan.com/img/cdn/125/30/icmjthidoctor.ir.jpg 
http://ser9.akairan.com/img/cdn/180/80/akairan__aka__m998__027343234141194102a.jpg 
http://ser9.akairan.com/img/cdn/180/80/akairan__aka__m998__074496544283135102a.jpg 



Но он должен возвращать только первый не ссылку на другие.

ответ

1

Поскольку есть <img> детей внутри <article class="contentpaneopen_text">, это нормально, что вы получаете более одного результата.

Ваш xpath должен быть более точным. Мы можем видеть, что тот, который вы хотите сопоставить, должен также иметь родительский <a> и должен иметь атрибут title.

попробуйте:

//article[@class="contentpaneopen_text"]//a/img[@title!='']/@src 
+0

две последние результаты не внутри <статья класс = "contentpaneopen_text"> но показывает в результатах поиска. это мой вопрос. @Yann – MehdiRahimi

+1

Они фактически находятся внутри '

', потому что тег не закрыт должным образом. попробуйте сбросить DOMDocument в файл и сами убедитесь в использовании '$ doc-> saveHTMLFile ('/ tmp/file.html');' прямо после 'loadHTMLFile'. '
' плохо помещается после двух последних результатов. Тем не менее, использование Xpath, предоставленное в моем ответе, позволяет только соответствовать желаемому значению. –

Смежные вопросы