2013-04-30 17 views
13

używam komponentu DomCrawler: http://symfony.com/doc/current/components/dom_crawler.htmlSymfony DomCrawler: Znajdź element o określonej wartości atrybutu

Chciałabym, korzystając z CSS jak składni uzyskać element o określonej wartości atrybutu.

Oto kod używam:

$link = $crawler->filter('#product a[data-type="bla"]'); 

To wydaje się działać, jak poniższe zwraca 1:

echo count($link); 

Jednak nie mogę nigdy filtrować dalej niż to. Nie mogę zrobić:

$link->filter('img')->attr('src'); 

Wynika to w następujący komunikat o błędzie:

The current node list is empty. 

Jednak wiem na pewno, że tak nie jest.

Próbowałem składni na innych elementach i zawsze jest tak samo. Robię coś nie tak lub nie jest to możliwe (z css jak składnia, nie xpath)

+2

Co to jest wyjście dla 'liczby echa ($ link-> filter ('img'));'? Jeśli 0, to myślę, że nie masz elementu img jako dziecka twojego. Z tego powodu 'Aktualna lista węzłów jest pusta. –

Odpowiedz

22

Nie mogę śledzić twojego problemu. Korzystanie z aktualnych wersji rozwojowych (a także 2.1.0 i 2.2.0 wersje) bibliotek programowych dwadom-gąsienicowe i css-selector, przykładowy kod, który podałeś działa dobrze biorąc pod uwagę następujący przykład HTML:

<?php 
use Symfony\Component\DomCrawler\Crawler; 

// require dependencies here  

$html = <<<'HTML' 
<!DOCTYPE html> 
<html> 
    <body> 
     <p class="message">Hello World!</p> 
     <p>Hello Crawler!</p> 
     <div id="product"> 
      <a data-type="bla"> 
       <img src="OK"> 
      </a> 
     </div> 
    </body> 
</html> 
HTML; 

$crawler = new Crawler($html); 

$link = $crawler->filter('#product a[data-type="bla"]'); 

echo var_dump(count($link)); 

var_dump($link->filter('img')->attr('src')); 

Jak widać to właśnie Twój kod (tylko trochę inaczej, ale w zasadzie nie), co daje następujący wynik verbatim:

int(1) 
string(2) "OK" 

pierwsza linia wyjściowa to count() a drugim jest wartość atrybutu src.

Czy uruchomiłeś aktualizację kompozytora? Czy sprawdziłeś dwukrotnie dane wejściowe?

+0

Dziękuję za odpowiedź. Muszę przeprosić. Dane wejściowe były rzeczywiście nieprawidłowe. Zostało ono przekształcone przez javascript i sprawdzałem przez Safari, które nie ma już prostej metody źródła widoku, co prowadzi do nieprawidłowych założeń danych. – Wesley

+1

@Wesley: https://discussions.apple.com/thread/4325736?start=0&tstart=0 <- włączyłeś menu programisty? –

Powiązane problemy