Comment supprimer des éléments spécifiques de HTML avec HTML Agility Pack for ASP.NET (vb)

asp.net html-agility-pack vb.net

Question

Il semble n'y avoir aucune documentation sur la page codeplex et, pour une raison quelconque, intellisense ne me montre pas les méthodes disponibles ni quoi que ce soit pour htmlagilitypack (par exemple, lorsque je tape MyHtmlDocument.DocumentNode. - Il n'y a pas d'intellisense pour me dire ce que je peux faire prochain)

J'ai besoin de savoir comment supprimer TOUTES les balises <a> et leur contenu du corps du document HTML. Je ne peux pas simplement utiliser Node.InnerText sur le corps, car cela renvoie toujours le contenu des balises A.

Voici un exemple HTML

<html>
    <body>
        I was born in <a name=BC>Toronto</a> and now I live in barrie
    </body>
</html>

J'ai besoin de rentrer

<html>
    <body>
        I was born in <a name=BC>Toronto</a> and now I live in barrie
    </body>
</html>

Merci, j'apprécie l'aide!

Thomas

Réponse acceptée

Cela vous donne le résultat dont vous avez besoin. Cela utilise la méthode récursive pour explorer tous vos nœuds html et vous pouvez simplement supprimer plus de nœuds en ajoutant un nouveau si

Public Sub Test()
    Dim document = New HtmlDocument() With { _
        Key .OptionOutputAsXml = True _
    }
    document.LoadHtml("<html><body>I was born in <a name=BC>Toronto</a> and now I live in barrie</body></html>")

    For i As var = 0 To document.DocumentNode.ChildNodes.Count - 1
        RecursiveMethod(document.DocumentNode.ChildNodes(i))
    Next

    Console.Out.WriteLine(document.DocumentNode.InnerHtml.Replace("  ", " "))
End Sub

Public Sub RecursiveMethod(child As HtmlNode)
    For x As var = 0 To child.ChildNodes.Count - 1
        Dim node = child.ChildNodes(x)
        If node.Name = "a" Then
            node.RemoveAll() //removes all the child nodes of "a"
            node.Remove()    //removes the actual "a" node
        Else
            If node.HasChildNodes Then
                RecursiveMethod(node)
            End If
        End If
    Next
End Sub

Réponse populaire

Quelque chose dans le genre de (désolé mon code est C # mais j'espère que cela aidera quand même)

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml("some html markup here");

HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//a[@name]");

foreach(HtmlNode link in links)
{
    link.Remove();
}

//then one of the many doc.Save(...) overrides to actually get the result of the operation.



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