【问题标题】:C#: HtmlAgilityPack extract inner textC#:HtmlAgilityPack 提取内部文本
【发布时间】:2011-02-16 14:59:37
【问题描述】:

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

【问题讨论】:

    标签: c# html-parsing


    【解决方案1】:

    像这样:

    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();
    

    【讨论】:

    • DocumentNode好像没有叫Descendant的函数? “‘HtmlAgilityPack.HtmlNode’不包含‘后代’的定义”
    • HTML Agility Pack V1.3.0.0,是不是太旧了?
    • 我用这段代码解决了我的一个问题。不过我确实有一个问题。如何在 foreach 循环中执行删除?
    • @WinCoder:什么意思?
    • 我的意思是不是不能修改正在使用 foreach 循环的集合。
    【解决方案2】:

    我写了一个简单的方法。它可能会帮助你。此方法可以提取所有特定标签的节点。然后你可以使用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 );
                    }
                }
            }
    

    【讨论】:

    • 通常,一篇文章的内容总是在

      标签中。

    猜你喜欢
    • 2011-12-08
    • 2012-08-17
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2012-07-19
    相关资源
    最近更新 更多