我有一个格式适中的HTML文档。它不是XHTML所以它不是有效的XML。给定开始标记的偏移量,我需要获取此标记的内容,考虑到它内部可以有多个嵌套标记。
使用最少量不涉及使用非标准库的C#代码解决此问题的最简单方法是什么?
答案 0 :(得分:1)
您可以使用以下功能删除html内容
public static string StripHTMLTag(string strHTML)
{
return Regex.Replace(strHTML, "<(.|\n)*?>", "");
}
传递外部标记的内容,这将删除所有html标记并仅为您提供内容。
希望这有帮助
答案 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;
}
}