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?
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.