2016-05-17 171 views
2

我需要標識包含一些文本的div元素的類。 例如,我有這樣的HTML頁面通過使用C#的div內容獲得div class

<html> 
    ... 
    <div class='x'> 
     <p>this is the text I have.</p> 
     <p>Another part of text.</p> 
    </div> 
    ... 
</html> 

所以我知道文this is the text I have. Another part of text.我需要確定DIV類名。有沒有辦法使用C#做到這一點?

+0

它是一個asp.net或mvc嗎? –

+0

您是否使用MVC跟隨ASP.NET或ASP.NET? –

+0

@Gaurav Singh Jantwal這只是一個html代碼。我有很多來自不同網站的網頁(具有不同的html結構),我需要爲每個網站標識文章文本的「html bourders」。之後我將使用HTML AGILITY PACK來從每個頁面獲取innerText。 –

回答

3

建立在diiN_的答案上。這有點冗長,但你應該能夠從中得到你所需要的。代碼取決於HTML Agility Pack。你可以使用nuget獲取它。

var sb = new StringBuilder(); 
sb.AppendFormat("<html>"); 
sb.AppendFormat("<div class='x'>"); 
sb.AppendFormat("<p>this is the text I have.</p>"); 
sb.AppendFormat("<p>Another part of text.</p>"); 
sb.AppendFormat("</div>"); 
sb.AppendFormat("</html>"); 

const string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>"; 

var document = new HtmlDocument(); 
document.LoadHtml(sb.ToString()); 

var divsWithText = document 
    .DocumentNode 
    .Descendants("div") 
    .Where(node => node.Descendants() 
         .Any(des => des.NodeType == HtmlNodeType.Text)) 
    .ToList(); 

var divsWithInnerHtmlMatching = 
    divsWithText 
     .Where(div => div.InnerHtml.Equals(stringToSearch)) 
     .ToList(); 

var innerHtmlAndClass = 
    divsWithInnerHtmlMatching 
     .Select(div => 
      new 
      { 
       InnerHtml = div.InnerHtml, 
       Class = div.Attributes["class"].Value 
      }); 

foreach (var item in innerHtmlAndClass) 
{ 
Console.WriteLine("class='{0}' innerHtml='{1}'", item.Class, item.InnerHtml); 
} 
+0

非常感謝!有用! –

+0

如果向解決方案添加庫不是一種選擇,該怎麼辦?我們應該採用骯髒的文本處理方式嗎? –

3

試試這個:

string stringToSearch = "<p>this is the text I have.</p><p>Another part of text.</p>"; 
HtmlDocument document = new HtmlDocument(); 
document.LoadHtml(sb.ToString()); 

var classOfDiv = document.DocumentNode.Descendants("div").Select(x => new 
{ 
    ClassOfDiv = x.Attributes["class"].Value 
}).Where(x => x.InnerHtml = stringToSearch); 

變量classOfDiv現在包含所需divclass名稱。

+0

謝謝。但是x沒有IntterText屬性。它怎麼能被修復? –

+0

只有沒有屬性InnerHtml或InnerText爲x ...我將HtmlAgilityPack添加到項目。所以這不是問題 –

+0

嘿,只是代表評論 - 問題是「選擇」。它創建了一個新的匿名變量序列,每個匿名變量都有一個「ClassOfDiv」屬性,但div節點中包含的其餘信息(select中的'x'變量)將被丟棄。 – Donal