Как удалить определенные элементы из HTML с помощью HTML Agility Pack для ASP.NET (vb) - PullRequest
0 голосов
/ 21 сентября 2011

Кажется, что на странице codeplex нет документации, и по какой-то причине intellisense не показывает мне доступные методы или что-либо вообще для htmlagilitypack (например, когда я набираю MyHtmlDocument.DocumentNode. Я могу делать дальше)

Мне нужно знать, как удалить ВСЕ теги и их содержимое из тела HTML-документа. Я не могу просто использовать Node.InnerText в теле, поскольку он по-прежнему возвращает содержимое из тегов А.

Вот пример 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

Спасибо, я ценю помощь!

Thomas

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Что-то вроде (извините, мой код 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.
0 голосов
/ 21 сентября 2011

Это дает вам требуемый результат. При этом используется рекурсивный метод для детализации всех ваших узлов html, и вы можете просто удалить больше узлов, добавив новый if 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
...