Простой DOM Parser, ЕСЛИ не работает - PullRequest
2 голосов
/ 26 октября 2011

Может кто-нибудь сказать, почему второй оператор if, извлекающий имя проданного пользователя, не будет работать должным образом?

Что я хочу сделать, это вытянуть имя атрибута alt из изображения, если есть изображение дляпродавец - который работает.Но если логотип изображения отсутствует, есть жирный тег с именем продавца, который я хочу вставить в то же место в массиве, что и тег alt.

HTML-код, с которым я работаюс: http: // amazon.com/gp/offer-listing/B002UYSHMM

Кто-нибудь может помочь?

Спасибо!

$item = array();

foreach ($html->find('div.resultsset table tbody.result tr') as $article) { 
  if ($article->find('span.price', 0)) {  
    // get retail  
    $item[$retail.$i++] = $article->find('span.price', 0)->plaintext;  
    // get soldby
    if ($article->find('ul.sellerInformation img', 0)) {
      $item[$soldby.$j++] = $article->find('ul.sellerInformation img', 0)->getAttribute('alt');
    } else {
      $item[$soldby.$j++] = $article->find('ul.sellerInformation li a b', 0)->plaintext;
    }
    $ret['SellerInfo'] = $item;
  }
}

Вот массивЯ получаю код, указанный выше:

 Array ( [0] => Array ( [Retail] => $219.88 [SoldBy] => J&R Music and Computer World ) [1] => Array ( [Retail] => $234.21 [SoldBy] => PORTABLE GUY ) [2] => Array ( [Retail] => $235.73 [SoldBy] => The Price Pros ) [3] => Array ( [Retail] => $234.74 [SoldBy] => GizmosForLife ) [4] => Array ( [Retail] => $230.00 [SoldBy] => ) [5] => Array ( [Retail] => $198.73 [SoldBy] => ) [6] => Array ( [Retail] => $240.72 [SoldBy] => ) [7] => Array ( [Retail] => $248.99 [SoldBy] => onSale ) ) 

Вы можете видеть, что в нем отсутствует SoldBy для:

STEPHS GREAT BOOK СОКРОВИЩА

Diakonos23

OptimumHouse

Ответы [ 3 ]

0 голосов
/ 26 октября 2011

Вы пробовали использовать

if (count($article->find('span.price'))) {

и

if (count($article->find('ul.sellerInformation img'))) {

?

0 голосов
/ 26 октября 2011

Разобрался:

foreach($html->find('div.resultsset table tbody.result tr') as $article) { 
if($article->find('span.price', 0)) {  
// get retail  
$item['Retail'] = $article->find('span.price', 0)->plaintext;  
// get soldby  
if($article->find('img', 0)->getAttribute('alt') <> '') {
$item['SoldBy'] = $article->find('img', 0)->getAttribute('alt'); }
else {$item['SoldBy'] = $article->find('ul.sellerInformation li a b', 0)->plaintext;}
$ret[] = $item; 
 }
} 
0 голосов
/ 26 октября 2011

Помимо того, что не стоит использовать b, ваши селекторы отличаются. Первый напрямую выбирает изображение в списке, а второй требует жирный тег внутри ссылки, внутри элемента списка.

...