2010-01-22 40 views
5

Bị nhức đầu thực sự ở giai đoạn này vào Thứ Sáu! Tôi đang cố gắng để thêm một HtmlNode khác bằng cách sử dụng InsertAfter(). Tôi có thể thấy nút refChild với id của breadcrumbs khi tôi rpint nó vào giao diện điều khiển nhưng vẫn gặp lỗi sau:Tôi nên sử dụng HTMLAgilityPack AppendNode như thế nào?

System.ArgumentOutOfRangeException: Node "<div id="breadcrumb"></div>" was not f 
ound in the collection 
Parameter name: node 
    at HtmlAgilityPack.HtmlNodeCollection.get_Item(HtmlNode node) 
    at HtmlAgilityPack.HtmlNode.InsertAfter(HtmlNode newChild, HtmlNode refChild) 

    at MyHome.Tasks.Tasks.DownloadandStoreContent(KeyValueP 
air`2 urlPair, String filePath, HtmlNode HtmlWrapper) in C:\Users\denis\Document 
s\Visual Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Tasks.cs:line 81 
    at MyHome.Tasks.Tasks.GenerateContent(String scrape 
sSwitch, String filePath) in C:\Users\denis\Documents\Visual Studio 2008\Website 
s\MyHomeV2\MyHome.Tasks\Tasks.cs:line 27 
    at MyHome.Tasks.Program.Main(String[] args) in C:\Users\denis\Documents\Visua 
l Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Program.cs:line 87 

Mã của tôi là:

HtmlWrapper.InsertAfter(ContentNode, HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']")); 

Và như đã đề cập tôi đã in ra cả HtmlWrapper và HtmlWrapper.SelectSingleNode ("// div [@ id = 'breadcrumb']") vào bảng điều khiển và có thể thấy nút trên màn hình. Bất kỳ ý tưởng về nơi tôi sẽ sai ở đây?

Cảm ơn, Denis

Trả lời

6

Từ một kỳ thi rất lướt qua về nguồn gốc, có vẻ như InsertAfter muốn refChild là một trực tiếp con của nút bạn gọi InsertAfter trên. Vì bạn đang tìm kiếm toàn bộ trục con cháu (với số //) cho nút div của mình, có thể nút thực tế bạn vượt qua là refChild không phải là số trực tiếp con của HtmlWrapper.

Hãy thử kéo HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") vào một biến và sau đó gọi InsertAfter trên số ParentNode.

+0

Điều đó không có hiệu quả lúc đầu nhưng tôi đã mang bộ chọn lên một vài cấp và cuối cùng cũng chỉ vào con của nút HtmlWrapper. Làm thế nào bạn biết nó cần một đứa trẻ cụ thể và không phải là một người bị đơn? –

+0

@Denis: tìm thấy nguồn thông qua một google cho HtmlNodeCollection InsertAfter, nhận thấy rằng các thành viên được lập chỉ mục vào được gọi là '_childNodes', đoán :) – AakashM

+1

Bí quyết ở đây là làm như sau: nodeToInstertBefore.ParentNode.InsertBefore (newNode, nodeToInsertBefore) Không rõ ràng, nhưng nó hoạt động :) – Philippe

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