2013-02-18 57 views
1

如何在跨班級表格中選擇兩個單元格? 我的html看起來像這樣。 我要的是選擇跨類=「商店名稱跨度」 和跨度類=「價」的innerText從跨班級表中選擇兩個單元格

<table class="list mixed zebra-striped"> 
<tbody> 

    <tr data-pris_typ="normal"> 

     <td class="span4-5"> 
      <span class="store-name-span">Electroworld</span> 
      <a data-drg="store-2641" class="drg-sidebar"></a> 
     </td> 

     <td class="span3 cell-bar"> 
      <span class="chart-bar price" style="width:50px"></span> 
      <span class="price" title="Uppdaterad 2013-02-18 08:23">1&nbsp;690:-</span> 
     </td> 

    </tr> 
     <tr data-pris_typ="normal"> 

     <td class="span4-5"> 
      <span class="store-name-span">Webhallen</span> 
      <a data-drg="store-113" class="drg-sidebar"</a> 
     </td> 


     <td class="span3 cell-bar"> 
      <span class="chart-bar price" style="width:50px"></span> 
      <span class="price" title="Uppdaterad 2013-02-18 13:55">1&nbsp;690:-</span> 
     </td> 
</tr> 
</tbody> 
</table> 

var Nodes = from x in doc2.DocumentNode.Descendants() 
         //where x.Attributes["class"].Value == "store-name-span" 
         where x.Name == "span" && x.Attributes["class"].Value == "store-name-span" 
         select x.InnerText; 
+0

var Nodes = from doc in doc2.DocumentNode.Descendants() 其中x.Name ==「span」&& x.Attributes [「class」]。Value ==「store-name-span」 select x。的innerText; – Gmorken 2013-02-18 15:28:47

回答

0

在特定HTML佈局,可以做:

var items = doc.DocumentNode.SelectNodes("//tr[@data-pris_typ='normal']").Select(x => new 
    { 
     Store = x.SelectSingleNode(".//span[@class='store-name-span']").InnerText, 
     Price = x.SelectSingleNode(".//span[@class='price']").InnerText 
    }); 

items你會得到你所需要的。每個項目將是一個匿名類型,其中StorePrice字段。

一件重要的事情:

您可能需要使用HttpUtility.HtmlDecode()清潔領域(如Price)。要做到這一點,您必須添加對System.Web組件的參考。

0

我會用的querySelectorAll組合和打水的innerHTML。

queryselectors在全局調用(在文檔上)以及爲單個元素調用。

1

我使用XPath此:

var nodes = doc.DocumentNode.SelectNodes("//span[@class='store-name-span' or @class='price']"); 
foreach (var node in nodes) 
    Console.WriteLine(node.InnerText); 

使用LINQ:

var nodes = doc.DocumentNode.Descendants("span") 
    .Where(s => 
     s.GetAttributeValue("class", null) == "store-name-span" || 
     s.GetAttributeValue("class", null) == "price" 
    ); 

這將讓你:

Electroworld 
1&nbsp;690:- 
Webhallen 
1&nbsp;690:- 
+0

好吧,但它可能與linq? ,以便我可以有一個像價格= x,公司= y – Gmorken 2013-02-18 16:01:38

+0

@TomasBredh:更新我的答案與LINQ版本 – Alex 2013-02-18 16:07:38

+0

@TomasBredh檢查我的答案,你需要做什麼。 – 2013-02-19 02:12:35