1

如何根据跨度类选择表中的两个单元格?我的 html 看起来像这样。我想要的是选择 span class="store-name-span" 和 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;
4

3 回答 3

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:-
于 2013-02-18T15:45:40.513 回答
0

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

查询选择器既适用于全局调用(在文档上),也适用于单个元素。

于 2013-02-18T15:44:29.193 回答
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你会得到你需要的东西。每个项目都将是一个带有StoreandPrice字段的匿名类型。

一件重要的事:

您可能想Price使用HttpUtility.HtmlDecode(). 为此,您必须添加对System.Web程序集的引用。

于 2013-02-19T02:10:47.757 回答