convertir le noeud htmlagilitypack en htmlelement .net

.net html-agility-pack

Question

Je viens d'utiliser htmlagilitypack pour extraire tous les liens en tant que htmlnode à partir d'un document html, mais j'ai besoin de ce résultat de ma fonction en tant que 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

Comment puis-je faire ceci?

Réponse acceptée

Je suppose que la seule façon de le faire est de créer HtmlElement , puis de copier les attributs et le code HTML interne à partir de HtmlNode .

Voici une méthode d'extension pour cela; il accepte une référence à une instance System.Windows.Forms.HtmlDocument pour créer un nouveau 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

Et pour l'utiliser, vous pourriez aimer ceci:

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

Mais notez bien que je ne connais pas très bien VB.NET, j’ai d’abord créé des exemples de code pour C #, puis les ai traduits en VB, NET.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi