2009-11-07 39 views
0

我正在加載WebBrowser控件中的特定網頁。有沒有辦法採取以下HTML將位於此頁面並將其保存爲一個字符串並修剪它?C# - 修剪Web瀏覽器內的HTML片段

下面是一個例子:

HTML摘錄:

<div class="alertText">26 friends joined</div> 

修剪:

我的非常模糊的描述抱歉,但我真的不知道怎麼說這個。謝謝。

回答

1

爲什麼不直接使用正則表達式搜索HTML而不是枚舉HtmlElement類型?

html = WebBrowser1.Document.documentElement.OuterHTML 
pattern = @'<div class="alertText">(\d{1,2}) friends joined</div>' 
for Match m in Regex.Matches(html, pattern) { 
    friendsJoined = Convert.ToInt32(m.Groups[1].Value) 
} 

如果你想刮不那麼依賴於HTML,你可以放下outerbits ...

html = WebBrowser1.Document.documentElement.OuterHTML 
pattern = @'>(\d{1,2}) friends joined</' 
for Match m in Regex.Matches(html, pattern) { 
    friendsJoined = Convert.ToInt32(m.Groups[1].Value) 
} 
+0

似乎不起作用。 – user

+0

需要更多的細節。 –

+0

「WebBrowser」中沒有'documentElement'屬性 - 您必須使用'webBrowser1.Document.Body.OuterHTML'或使用非web託管的mshtml接口和'webBrowser1.Document.DomDocument'。 – Majkel

0

你的意思是這樣的:

string numberOfFriends; 

HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("div"); 
foreach(HtmlElement elem in elems) 
{ 
    string className = elem.GetAttribute("className"); 
    if(!string.IsNullOrEmpty(className) && "alertText".Equals(className)) 
    { 
    string content = elem.InnerText; 
    if(Regex.IsMatch(content, "\\d+ friends joined")) 
    { 
     numberOfFriends = Regex.Match(content, "(\\d+) friends joined").Groups[ 1 ].Value; 
    } 
    } 
} 

我不能完全肯定,如果正則表達式是完全正確的,但其餘的應該工作。

編輯:更改Groups[ 0 ]Groups[ 1 ] - IIRC第一組是完整的比賽。

編輯2:更改elem.GetAttribute("class")elem.GetAttribute("className") - 固定屬性的名稱和固定變量名稱(classclassName)。

+0

似乎不起作用。 – user

+0

哪部分?班級是一個保留字,我會在我將要訪問計算機時檢查其餘的內容。 – Majkel

+0

好吧,現在它工作 - 屬性名稱是錯誤的。 – Majkel

0

我會說,這是一個更好的正則表達式匹配;

html = WebBrowser1.Document.documentElement.OuterHTML 
pattern = @'(\d+)\sfriends\sjoined' 
for Match m in Regex.Matches(html, pattern) { 
    friendsJoined = Convert.ToInt32(m.Groups[1].Value) 
}