2010-09-08 45 views
15

tôi không thích một số các quyết định thiết kế thực hiện trong HtmlAgilityPack:Lựa chọn thay thế cho HtmlAgilityPack?

  • Khi sử dụng SelectNodes, nếu không có các nút được tìm thấy, nó sẽ trả null chứ không phải là một tập rỗng, vì vậy bạn có thể không chỉ foreach trên nó mà không có một kiểm tra null.
  • Khi cố gắng chọn trẻ em với node.SelectNodes, nó thực sự tìm kiếm từ gốc tài liệu trừ khi bạn sử dụng descendant:: không rõ ràng và cũng không mong đợi hành vi nào cả, IMO.
  • HtmlDocument.Load không trả lại nút gốc, đó là những gì bạn muốn 99% thời gian, tôi nghĩ

Bạn có thể không đồng ý với điều đó tất nhiên, nhưng đó không phải là vấn đề. Tôi đang tìm kiếm một cái gì đó khác nhau. Một cái gì đó mà cư xử nhiều hơn một chút dự kiến, hoặc cái gì đó sử dụng cú pháp jQuery sẽ còn tốt hơn. Gợi ý?

+0

tôi hy vọng nó phù hợp với bạn, http://code.google.com/p/fizzler/ –

+1

Đối với các ví dụ bạn đã đưa ra, sẽ khá dễ dàng để thay đổi hành vi đối với hành vi mà bạn mong muốn. Kể từ khi HtmlAgilityPack là mã nguồn mở, bạn đã xem xét việc dùng một cái nĩa địa phương và thực hiện những thay đổi đó? –

+0

Trong thời gian này tôi đã chỉ gói nó với các chức năng của riêng tôi, nhưng vẫn còn. Nếu có điều gì khác ngoài kia phù hợp hơn với triết lý của tôi, tôi sẽ không lãng phí nỗ lực của mình :) Tôi chỉ thỉnh thoảng phân tích cú pháp HTML cho các dự án nhỏ, vì vậy tôi không nghĩ rằng nó đáng để tôi sửa chữa đó là cách tôi nghĩ nó phải như vậy. – mpen

Trả lời

2

Nếu bạn chỉ phân tích cú pháp html, một tùy chọn khác có thể là SgmlReader. Nếu bạn đang sửa đổi html, không quá nhiều. Đừng nhớ cách nó hoạt động đối với các vấn đề bạn nêu ra, nhưng nó đáng để kiểm tra.

+0

Theo như tôi thấy, thư viện đó chỉ chuyển đổi HTML không đúng định dạng thành HTML hợp lệ ... nó không nói gì về xpath/truy vấn/đi qua cây DOM. Tôi không cần phải sửa đổi tài liệu, nhưng tôi * cần * cần truy vấn nó. – mpen

+4

Nó biến nó thành xml hợp lệ dưới dạng XmlDocument. Sau đó, bạn có thể gọi một trong các quá tải XmlDocument.CreateNavigator() để có được một đối tượng XPathNavigator để thực hiện các truy vấn xpath. – aciemian

4

dự án đầu gọi SharpQuery

Hiện nay hỗ trợ ID, giai cấp, thẻ, và thuộc tính selectors.

a 
a[href] 
a[href^=http://stackoverflow.com] 
.class 
#id 

Cập nhật: Tôi không duy trì dự án này, xin lỗi. CsQuery có các cập nhật gần đây (tính đến tháng 7 năm 2013), nhưng tôi không có kinh nghiệm sử dụng nó.

+1

Tôi đã bỏ phiếu cho SharpQuery + HTMLAgilityPack để hợp nhất một thời gian dài trước đây. Cos phân tích cú pháp HTML và cấu trúc DOM phải khác biệt rõ ràng với công cụ truy vấn ... Ngoài ra, HTMLAgilityPack hỗ trợ nhiều phương thức truy vấn - XPath, LINQ và DOm traversal. SharpQuery trên đầu trang đó sẽ là tuyệt vời – CVertex

+0

Ồ, chờ đợi u vừa mới bắt đầu dự án đó? Tôi đề xuất tham gia một dự án khác nhau mà không chính xác điều tương tự như SharpQuery ... lemme tìm thấy nó – CVertex

+1

FOund nó - http://code.google.com/p/fizzler/ và đây là yêu cầu hợp nhất của tôi http: //htmlagilitypack.codeplex .com/Chủ đề/View.aspx?ThreadId = 76383 – CVertex