2012-07-10 31 views
5

Tôi đang viết một Trình tải xuống nhỏ, tìm kiếm liên kết ở các lớp thấp hơn cho chính nó.Chọn các phần tử có url dữ liệu thuộc tính bằng cách sử dụng HTMLAgilityPack

gì tôi cần phải tìm được tất cả các liên kết trong một trang HTML (các liên kết đến tập tin .jpg cũng như các liên kết đến .pgn, .pdf, .html, .... - file)

Tôi đang sử dụng html-agilitypack để tìm tất cả liên kết a href.

Mẫu mã:

foreach (HtmlNode link in htmlDocument.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    HtmlAttribute attribute = link.Attributes["href"]; 
    links.Add(attribute.Value); 
} 

Nhưng tôi muốn tìm các dữ liệu-urls là tốt.

Tôi phải sử dụng cú pháp XPath nào để tìm url dữ liệu. Ví dụ về url dữ liệu trong mã html:

<div class="cbreplay" data-url="2012\edmonton\partien.pgn"></div> 

Tôi cần "2012 \ edmonton \ partien.pgn" trong ví dụ này. Làm thế nào tôi có thể nhận ra điều này với cú pháp XPath?

Lời chào tốt nhất, nếu tôi mắc phải một số lỗi sai, hãy cho tôi biết. Đây là câu hỏi đầu tiên của tôi.

Trả lời

11

Sau đây nên làm những gì bạn muốn:

foreach (HtmlNode divNode in htmlDocument.DocumentNode.SelectNodes("//div[@data-url]")) 
{ 
    HtmlAttribute attribute = divNode.Attributes["data-url"]; 
    links.Add(attribute.Value); 
} 

hiệu quả, báo cáo kết quả //div[@data-url] nên chọn tất cả các nút với một thuộc tính dữ liệu url. Chúng tôi sau đó kéo ra thuộc tính này.

Nếu có các nút không phải là div với thuộc tính này, thì //*[@data-url] sẽ thực hiện thủ thuật.

+0

cảm ơn rất nhiều, hoạt động của nó hoàn hảo. –

+2

có thể linh hoạt hơn khi sử dụng '*' thay vì 'div' -' "// * [@ data-url]" '. Những tác giả html darn tiếp tục thay đổi html của họ! – user3791372