convertir el nodo htmlagilitypack a htmlelement .net

.net html-agility-pack

Pregunta

Acabo de usar htmlagilitypack para extraer todos los enlaces como htmlnode de un documento html, pero necesito que esto se devuelva de mi función como 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

¿Cómo puedo hacer esto?

Respuesta aceptada

Sospecho que la única forma de hacerlo es crear HtmlElement , y luego copiar los atributos y el HTML interno de HtmlNode .

Aquí hay un método de extensión para esto; acepta una referencia a una instancia de System.Windows.Forms.HtmlDocument para crear un nuevo elemento 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

Y para usarlo te podría gustar esto:

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

Pero tenga en cuenta que no soy muy familiar con VB.NET, primero creé ejemplos de código para C # y luego los traduje a VB, NET.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué