2010-09-29 26 views
5

Tôi đang cố gắng phân tích trường này, nhưng không thể làm cho nó hoạt động. Nỗ lực hiện tại:Gói nhanh nhẹn C# Html (SelectSingleNode)

var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtml; 


<h1 class="bla" id="my_name">namehere</h1> 

Lỗi: Tham chiếu đối tượng không được đặt thành thể hiện của đối tượng.

Đánh giá cao sự trợ giúp.

@John - Tôi có thể đảm bảo rằng HTML được tải chính xác. Tôi đang cố gắng đọc tên facebook của tôi cho mục đích học tập. Đây là một ảnh chụp màn hình từ plugin Firebug. Phiên bản tôi đang sử dụng là 1.4.0.

http://i54.tinypic.com/kn3wo.jpg

Tôi đoán vấn đề là profile_name là một nút con hoặc một cái gì đó, đó là lý do tại sao tôi không thể đọc nó?

+0

Bạn đã thử gỡ lỗi chưa? Dòng mã của bạn không thành công? Mã của bạn khi được viết hoạt động chính xác. –

+0

Tôi đã đăng dòng mà nó không thành công. – josh

+0

Bạn có thể hiển thị mã tải HTML của mình không? Ngoài ra, đối tượng nào trong chuỗi của bạn là null? Bạn có nhiều thẻ H1 với cùng một ID không? Bạn đang sử dụng phiên bản HTML Agility Pack nào? –

Trả lời

0

Hãy thử điều này:

var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml; 
+0

Không hoạt động. "Biểu thức phải đánh giá thành bộ nút". – josh

18

Lý do mã của bạn không hoạt động là bởi vì có JavaScript trên trang đó là thực sự viết ra thẻ <h1 id='profile_name'>, vì vậy nếu bạn đang yêu cầu trang từ một tài khoản Tác nhân (hoặc thông qua AJAX) không thực thi JavaScript thì bạn sẽ không tìm thấy phần tử.

tôi đã có thể để có được tên của riêng tôi bằng cách sử dụng bộ chọn sau:

string name = 
    doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText; 
+0

Điều này phải được đánh dấu là câu trả lời. Điều này thực sự đã giúp tôi. Mã được tạo động không hoạt động trong dll này. –

0
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText; 
0
public async Task<List<string>> GetAllTagLinkContent(string content) 
    { 


     string html = string.Format("<html><head></head><body>{0}</body></html>", content); 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     var nodes = doc.DocumentNode.SelectNodes("//[@id='my_name']"); 
     return nodes.ToList().ConvertAll(r => r.InnerText).Select(j => j).ToList(); 

    } 

Đó là ok với ("// a [@href]"); Bạn có thể dùng thử như trên.Hy vọng hữu ích

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