我有一个格式适中的HTML文档。它不是XHTML,所以它不是有效的XML。鉴于开始标签的偏移量,我需要获取此标签的内容,因为它可以在其中包含多个嵌套标签。在C#中获取div元素内容
用最少量的C#代码解决这个问题的最简单方法是什么,它不涉及使用非标准库?
我有一个格式适中的HTML文档。它不是XHTML,所以它不是有效的XML。鉴于开始标签的偏移量,我需要获取此标签的内容,因为它可以在其中包含多个嵌套标签。在C#中获取div元素内容
用最少量的C#代码解决这个问题的最简单方法是什么,它不涉及使用非标准库?
可以使用下面的函数
public static string StripHTMLTag(string strHTML)
{
return Regex.Replace(strHTML, "<(.|\n)*?>", "");
}
通过你的外层标签的内容剥去你的HTML内容,这将去除所有的HTML标签,并提供你只有内容。
希望这有助于
注意:从不使用正则表达式来实现安全性。我不确定这是否也回答OP的问题,但直到OP澄清这个问题似乎是合适的。 – 2010-06-30 01:44:11
我最后写了下面的函数。它似乎为我的目的完成了这项工作。
我知道这很脏,但大多数网页的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;
}
}
哪一个偏移您使用的?从层次结构上看,有多少个角色或多个层次? – EndangeredMassa 2010-06-30 01:40:42
偏移量是字符数。文档没有被解析,所以没有关于标签及其内容的信息。 – Ghostrider 2010-06-30 02:14:09
非标准的意思是: 1.你不需要任何不包含在.NET框架本身中的东西。 或 2.您不希望任何调用非托管代码的库。 – SamuelWarren 2010-06-30 02:35:27