конвертировать htmlagilitypack узел в htmlelement .net

.net html-agility-pack

Вопрос

Я только что использовал 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.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему