C#:HtmlAgilityPack提取内部文本

时间:2010-05-06 23:01:51

标签: c# html-parsing

我正在使用HtmlAgilityPack。是否有一行代码可以获取html的所有内部文本,例如删除所有html标签和脚本?

2 个答案:

答案 0 :(得分:16)

像这样:

document.DocumentNode.InnerText

请注意,这将返回<script>标记的文字内容。

要解决此问题,您可以删除所有<script>标记,如下所示:

foreach(var script in doc.DocumentNode.Descendants("script").ToArray())
    script.Remove();
foreach(var style in doc.DocumentNode.Descendants("style").ToArray())
    style.Remove();

答案 1 :(得分:1)

我写了一个简单的方法。它可能会帮助你。此方法可以提取所有特定标记的节点。然后,您可以使用HtmlNodeCollection[i].InnerText获取其文字。

    HtmlDocument hDoc;
    HtmlNodeCollection nodeCollection;

    public void InitInstance(string htmlCode) {
        hDoc.LoadHtml(htmlCode);
        nodeCollection = new HtmlNodeCollection();
    }
    private void GetAllNodesInnerTextByTagName(HtmlNode node, string tagName) {
        if (null == node.ChildNodes) {
            return ;
        } else {
            HtmlNodeCollection nCollection = node.SelectNodes( tagName );
            if( null != nCollection ) {
                for( int i=0; i<nCollection.Count; i++) {
                    nodeCollection.Add( nCollection[i]);
                    nCollection[i].Remove();
                }
            }
            nCollection=node.ChildNodes;
            if(null != nCollection) {
                for(int i=0;i<nCollection.Count; i++) {
                    GetAllNodesInnerTextByTagName( nCollection[i] , tagName );
                }
            }
        }