2013-04-30 35 views
13

Tôi đang sử dụng các thành phần DomCrawler: http://symfony.com/doc/current/components/dom_crawler.htmlSymfony DomCrawler: Tìm phần tử với giá trị thuộc tính cụ thể

tôi muốn, bằng cách sử dụng CSS như cú pháp, nhận được một phần tử với một giá trị thuộc tính cụ thể.

Dưới đây là đoạn code tôi đang sử dụng:

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

Điều này dường như làm việc, như lợi nhuận sau 1:

echo count($link); 

Tuy nhiên, tôi không bao giờ có thể không lọc xa hơn thế. Tôi không thể làm:

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

Điều này dẫn đến các thông báo lỗi sau:

The current node list is empty. 

Tuy nhiên, tôi biết chắc chắn rằng nó không phải là.

Tôi đã thử cú pháp trên các phần tử khác và nó luôn giống nhau. Tôi đang làm điều gì sai hoặc không thể thực hiện được (với cú pháp như css, không phải xpath)

+2

Đầu ra cho 'echo count ($ link-> filter (' img ')); 'là gì? Nếu 0, tôi đoán bạn không có một phần tử img như một đứa trẻ của bạn. Đó là lý do 'Danh sách nút hiện tại trống. ' –

Trả lời

22

Tôi không thể theo dõi vấn đề của bạn. Sử dụng các phiên bản mới phát triển (và cũng 2.1.0 và 2.2.0 phiên bản) của hai thư viện phần mềm dom-crawlercss-selector, mã ví dụ mà bạn cung cấp các tác phẩm tốt xem xét ví dụ HTML sau:

<?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')); 

Như bạn có thể thấy điều này là chính xác mã của bạn (chỉ một chút khác nhau nhưng về cơ bản không), trong đó cung cấp cho các đầu ra sau đây nguyên văn:

int(1) 
string(2) "OK" 

dòng sản lượng đầu tiên là count() và thứ hai là giá trị thuộc tính src.

Bạn có chạy bản cập nhật soạn nhạc không? Bạn đã kiểm tra lại đầu vào chưa?

+0

Cảm ơn câu trả lời của bạn. Tôi phải xin lỗi. Đầu vào thực sự không chính xác. Nó đã được chuyển qua javascript và tôi đã kiểm tra qua Safari, mà không có phương thức nguồn xem đơn giản nữa, dẫn đến giả định không chính xác của dữ liệu. – Wesley

+1

@Wesley: https://discussions.apple.com/thread/4325736?start=0&tstart=0 <- bạn đã bật menu nhà phát triển chưa? –

Các vấn đề liên quan