Я только что использовал htmlagilitypack, чтобы извлечь всю ссылку как htmlnode из html-документа, но мне нужно, чтобы это возвращалось из моей функции как htmlelement
Dim Tags As HtmlNodeCollection = docNode.SelectNodes(strXpath)
Dim ListResult As New List(Of HtmlElement)
For Each Tag As HtmlNode In Tags
ListResult.Add(Tag.Element)
Next
Return Nothing
Как я могу это сделать?
Я подозреваю, что единственный способ сделать это - создать HtmlElement
, а затем скопировать атрибуты и внутренний HTML из HtmlNode
.
Вот для этого метод расширения; он принимает ссылку на экземпляр System.Windows.Forms.HtmlDocument
для создания нового HtmlElement
:
<System.Runtime.CompilerServices.Extension> _
Public Shared Function ToHtmlElement(node As HtmlNode, doc As System.Windows.Forms.HtmlDocument) As HtmlElement
Dim element = doc.CreateElement(node.Name)
For Each attribute As HtmlAttribute In node.Attributes
element.SetAttribute(attribute.Name, attribute.Value)
Next
element.InnerHtml = node.InnerHtml
Return element
End Function
И для его использования вам может понравиться следующее:
Dim browser As New WebBrowser()
browser.Navigate("about::blank")
Dim Tags As HtmlNodeCollection = docNode.SelectNodes(strXpath)
Dim ListResult As New List(Of HtmlElement)
For Each Tag As HtmlNode In Tags
ListResult.Add(Tag.ToHtmlElement(browser.Document))
Next
Return Nothing
Но, пожалуйста, обратите внимание: я не слишком знаком с VB.NET, сначала создал примеры кода для C #, а затем перевел их на VB, NET.