2012-02-11 30 views
5

Tôi đi qua DOM sử dụng:Làm thế nào để có được tất cả các thuộc tính của một phần tử html từ WebBrowser Component

webBrowser.Document.Body.Parent.Children 

Tôi muốn để có được tất cả các thuộc tính của một cụ HTMLElement. Tuy nhiên, HTMLElement chỉ có phương thức getAttribute. Tôi đang tìm một cái gì đó giống như htmlelement.attributes[n]. Bởi vì tôi không biết các thuộc tính trước đó.

Trả lời

2

Nếu wbMain là kiểm soát WebBrowser1 của bạn, làm như sau.

Trước tiên, bạn cần phải có được một ref cho phần tử của bạn, cho phép nói rằng bạn muốn truy cập vào liên kết <A> đầu tiên, của trang của bạn, bạn có thể lặp qua tất cả nếu bạn muốn.

Đây là trong VB, nhưng nó cùng một loại điều trong C#, chỉ cú pháp khác nhau.

Dim i As Integer 
Dim aElement As HTMLAnchorElement = wbMain.Document.All.getElementByTagName("A")(0) 

For i = 0 To aElement.attributes.length - 1 
    MsgBox aElement.attributes.item(i).name & "=" & aElement.attributes.item(i).value 
Next i 

Điều này sẽ lặp qua tất cả các thuộc tính và hiển thị nó trong MSGBOX ở định dạng name=value.

Nếu bạn muốn truy xuất bằng tên (tên thuộc tính), chỉ cần gọi bằng cách sử dụng aElement.getAttribute("target") để truy xuất giá trị thuộc tính đích từ Liên kết.

Nếu bạn muốn xác nhận bạn có đúng đối tượng/yếu tố, chỉ cần thực hiện aElement.outerHTML để nhận mã HTML đầy đủ cho phần tử đó.

Vì tôi đang sử dụng phiên bản pre.NET, vui lòng thay đổi tuyên bố từ HTMLAnchorElement thành IHTMLAnchorElement nếu nó gây khó khăn cho bạn, tất nhiên, bạn chỉ có thể sử dụng IHTMLElement nếu bạn muốn xem tất cả các phần tử trên một trang, thì tất cả những gì bạn cần làm là wbMain.Document.All (0) cho phần tử đầu tiên trên một trang, hoặc lặp lại cho đến khi .All.length - 1 đi qua tất cả. Hãy nhớ nếu bạn đang sử dụng lồng nhau Đối với vòng lặp, không sử dụng i hai lần, sử dụng j cho một trong số họ :).

Hãy cho tôi biết nếu điều này trả lời câu hỏi của bạn hoặc nếu có nhiều hơn tôi có thể làm để giúp bạn giải quyết vấn đề của bạn.

2

bạn có thể sử dụng để phân tích HtmlAgilityPack html doc trong u r trường hợp u có thể sử dụng

var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.Load(FileName); 
    var node = doc.DocumentNode.SelectNodes("//NameofHtmlTag")[0]; 
    foreach (HtmlAgilityPack.HtmlAttribute attri in node.Attributes) 
    { 
     //iterate through attributes 
    }  
+0

Cảm ơn phản hồi của bạn, nhưng trong trường hợp này tôi phải giữ nguyên cách IE phân tích cú pháp tài liệu. Vì lý do đó, tôi không thể sử dụng HAP. Tôi đang tìm kiếm một giải pháp sử dụng HTMLElement hoặc mã không được quản lý trong trường hợp xấu nhất. – Devela

+0

@Deveta HTMLAgilityPack là khó chịu, tôi sẽ không khuyên bạn nên sử dụng nó. –

+0

@ Devela, tại sao không? – as9876

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