¿Cómo elimino elementos específicos de HTML con HTML Agility Pack para ASP.NET (vb)?

asp.net html-agility-pack vb.net

Pregunta

Parece que no hay documentación en la página de codeplex y, por alguna razón, intellisense no me muestra los métodos disponibles ni nada para htmlagilitypack (por ejemplo, cuando escribo MyHtmlDocument.DocumentNode. No hay ninguna inteligencia que me diga qué puedo hacer siguiente)

Necesito saber cómo eliminar TODAS las etiquetas <a> y su contenido del cuerpo del documento HTML. No puedo usar Node.InnerText en el cuerpo porque aún retorna el contenido de las etiquetas A.

Aquí está el ejemplo HTML

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

Necesito regresar

I was born in and now I live in barrie

Gracias, agradezco la ayuda!

Thomas

Respuesta aceptada

Esto le da el resultado que necesita. Este utiliza el método Recursivo para profundizar en todos sus nodos html y simplemente puede eliminar más nodos agregando una nueva declaración 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

Respuesta popular

Algo en la línea de (lo siento, mi código es C # pero espero que ayude de todas formas)

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.


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é