从具有span类的表中选择两个单元格

时间:2013-02-18 15:18:21

标签: html-agility-pack

如何在span类的表格中选择两个单元格? 我的HTML看起来像这样。 我想要的是选择span class =“store-name-span”的innertext 和span class =“price”

<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;

3 个答案:

答案 0 :(得分: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:-

答案 1 :(得分:0)

我会使用querySelectorAll的组合并获取innerHTML。

queryselectors可以全局调用(在文档上)以及单个元素。

答案 2 :(得分: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字段。

一件重要的事情:

您可能希望使用Price清除字段(例如HttpUtility.HtmlDecode())。为此,您必须添加对System.Web程序集的引用。