получить содержимое элемента div в C # - PullRequest
0 голосов
/ 30 июня 2010

У меня умеренно хорошо отформатированный HTML-документ. Это не XHTML, поэтому это не допустимый XML. Учитывая смещение открывающего тега, мне нужно получить содержимое этого тега, учитывая, что внутри него может быть несколько вложенных тегов.

Какой самый простой способ решить эту проблему с минимальным количеством кода C #, который не требует использования нестандартных библиотек?

Ответы [ 2 ]

1 голос
/ 30 июня 2010

Вы можете удалить свой HTML-контент, используя следующую функцию

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

передать ваше содержимое внешнего тега, это удалит все HTML-теги и предоставит вам только контент.

Надеюсь, это поможет

Имран

0 голосов
/ 30 июня 2010

В итоге я написал следующую функцию.Похоже, это сделано для моих целей.

Я знаю, что это немного грязно, но 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;
        }
    }
...