在C#中获取div元素内容

时间:2010-06-30 01:16:35

标签: c# html string parsing

我有一个格式适中的HTML文档。它不是XHTML所以它不是有效的XML。给定开始标记的偏移量,我需要获取此标记的内容,考虑到它内部可以有多个嵌套标记。

使用最少量不涉及使用非标准库的C#代码解决此问题的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用以下功能删除html内容

public static string StripHTMLTag(string strHTML)
{
        return Regex.Replace(strHTML, "<(.|\n)*?>", "");
}

传递外部标记的内容,这将删除所有html标记并仅为您提供内容。

希望这有帮助

Imran

答案 1 :(得分:0)

我最后编写了以下功能。它似乎为我的目的完成了工作。

我知道它有点脏,但大多数网页的HTML代码也是如此。

如果有人能指出主要缺陷,请这样做:

    private static readonly Regex rxDivTag = new Regex(
        @"<(?<close>/)?div(\s[^>]*?)?(?<selfClose>/)?>",
        RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.Singleline);
    private const string RXCAP_DIVTAG_CLOSE = "close";
    private const string RXCAP_DIVTAG_SELFCLOSE = "selfClose";

    private static List<string> GetProductDivs(string pageText, int start)
    {
        bool success = true;
        int curr = start + 1;
        for (Match matchNextTag = rxDivTag.Match(pageText, curr) ; depth > 0 ; matchNextTag = rxDivTag.Match(pageText, curr))
        {
            if (matchNextTag == Match.Empty)
            {
                success = false;
                break;
            }

            if (matchNextTag.Groups[RXCAP_DIVTAG_CLOSE].Success)
            {
                if (matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success)
                {
                    success = false;
                    break;
                }

                --depth;
            }
            else if (!matchNextTag.Groups[RXCAP_DIVTAG_SELFCLOSE].Success)
            {
                ++depth;
            }

            curr = matchNextTag.Index + matchNextTag.Length;
        }

        if (success)
        {
            return pageText.Substring(start, curr - start);
        }
        else
        {
            return null;
        }
    }