2013-02-18 55 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