如何使用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>

我需要回來

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

謝謝,謝謝你的幫助!

托馬斯

一般承認的答案

這可以為您提供所需的結果。這使用遞歸方法來深入查看所有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合法嗎? 是的,了解原因