如何使用HTML Agility Pack for ASP.NET(vb)从HTML中删除特定元素

asp.net html-agility-pack vb.net

似乎没有关于codeplex页面的文档,由于某种原因,intellisense没有向我展示htmlagilitypack的可用方法或任何内容(例如当我输入MyHtmlDocument.DocumentNode时 - 没有intellisense告诉我我能做什么下一个)

我需要知道如何从HTML文档的主体中删除所有<a>标记及其内容我不能仅在Body上使用Node.InnerText,因为它仍然从A标记返回内容。

这是HTML示例

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

我需要回来

I was born in and now I live in barrie

谢谢,谢谢你的帮助!

托马斯

一般承认的答案

这可以为您提供所需的结果。这使用递归方法来深入查看所有html节点,您可以通过添加新的if语句来删除更多节点。

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

热门答案

有些事情(抱歉我的代码是C#,但我希望它会有所帮助)

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.



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因