2016-04-02 9 views
0

私はこれを行うにはさまざまな方法(webclient、webrequestなど)を試してきましたが、結局はできませんでした。C#idなしのHTML要素へのアクセス

<td class="period_slot_1"> 
<strong>TG</strong> 

私が望むのは、上記のテキスト値にアクセスすることです。結果として「TG」が得られます。

どうすればいいですか?

+0

あなたは正規表現を使用することができます。またはHTMLパーサー。 –

答えて

0

私はAngleSharpのファンしています。 HTMLスニペットを使用した最小限の例を示します。あなたは、もちろん問題なく"strong"を選択できるように

 static void Main(string[] args) 
     { 
      var source = @" 
<html> 
<head> 
</head> 
<body> 
    <td class=""period_slot_1""> 
    <strong>TG</strong> 
</body> 
</html>"; 

      var parser = new HtmlParser(); 
      var document = parser.Parse(source); 
      var strong = document.QuerySelector("strong"); 

      Console.WriteLine(strong.TextContent); 
     } 

QuerySelector()方法は、CSSセレクタを取ります。あなたがテーブルのうちデータとクラスの問題を取得することを目指している場合は

、あなたはクラスやデータを投影するDOMとLINQを使用します(再び、JavaScriptのから通常のDOMを使用して、あなたはそうするために使用している)ことができ、以下のような

  static void Main(string[] args) 
      { 
       var source = @" 
<table> 
    <tr> 
     <td class=""period_slot_1""> 
      <strong>TG</strong> 
     </td> 
     <td class=""period_slot_2""> 
      <strong>TH</strong> 
     </td> 
     <td class=""period_slot_3""> 
      <strong>TJ</strong> 
     </td> 
    </tr> 
    <tr> 
     <td class=""period_slot_1""> 
      <strong>YG</strong> 
     </td> 
     <td class=""period_slot_2""> 
      <strong>YH</strong> 
     </td> 
     <td class=""period_slot_3""> 
      <strong>YJ</strong> 
     </td> 
    </tr> 
</table>"; 

       var parser = new HtmlParser(); 
       var document = parser.Parse(source); 
       var strongs = document.QuerySelectorAll("td > strong") 
        .Select(x => new 
        { 
         Class = x.ParentElement.ClassName, 
         Data = x.TextContent 
        }) 
        .OrderBy(x => x.Class); 

       strongs.ToList().ForEach(Console.WriteLine); 
      } 

出力:

{ Class = period_slot_1, Data = TG } 
{ Class = period_slot_1, Data = YG } 
{ Class = period_slot_2, Data = TH } 
{ Class = period_slot_2, Data = YH } 
{ Class = period_slot_3, Data = TJ } 
{ Class = period_slot_3, Data = YJ } 
+0

それは動作します!どうもありがとうございます。しかし、私はウェブサイトからそれらのデータを読み取ろうとしているので、どのようにしてvarソースが実際にウェブサイトからロードするようにウェブサイトを参照することができますか? –

+0

Anglesharpのreadmeドキュメントには、ここにサイトをロードする例があります:https://github.com/AngleSharp/AngleSharp#simple-demo – jdphenix

+0

ありがとうございました:) –

0

getElementsByClassNameを使用して親を識別し、子孫を探します。

var parent = getElementsByClassName("period_slot_1") 
var descendants = parent.getElementsByTagName("strong"); 
if (descendants.length) 
{ 
    // logic goes here. 
} 
+0

コメントありがとう!私はあなたがなぜそこに(descendants.length)を置くのか理解していませんが? –

+0

**子孫**の要素があることを確認してください** –

+0

申し訳ありません。だから、私はvar子孫の "強い"のタグネームの要素を持っていますが、そこに保存されている情報(TGとなるでしょう)にどのようにアクセスできますか? –

関連する問題