我有一個格式適中的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