2016-05-17 13 views
2

テキストを含むdiv要素のクラスを識別する必要があります。 は、例えば、私は、このHTMLページにdiv内の内容でdivクラスを取得するC#

<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」を特定する必要があります。 tatの後、HTML Agility Packを使用して各ページからinnerTextを取得します。 –

答えて

3

diiN_の回答に基づいて構築してください。これは少し冗長ですが、必要なものを得ることができるはずです。コードはHTML Agility Packに依存します。あなたはナゲットを使ってそれを得ることができます。

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

xのプロパティInnerHtmlまたはInnerTextはありません...私はプロジェクトにHtmlAgilityPackを追加しました。だからこれは問題ではない –

+0

ちょっと、コメントするのに十分な担当者 - 問題は ".Select"です。それぞれが "ClassOfDiv"プロパティを持つ新しい匿名変数のシーケンスを作成しますが、divノードに含まれる残りの情報(選択内の 'x'変数)は破棄されます。 – Donal

関連する問題