C#访问没有id的html元素

时间:2016-04-02 03:21:28

标签: c#

我一直在尝试各种不同的方法(webclient,webrequest等),但毕竟我无法做到。

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

我想要的是访问上面的文本值,以便我得到&#34; TG&#34;结果。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我是AngleSharp的粉丝。这是使用HTML代码段的最小示例。

        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选择器,因此您当然可以毫无困难地选择"strong"

如果您的目标是从表中获取数据并且该类很重要,您可以(再次使用您可能习惯使用的JavaScript中的普通DOM)使用DOM和LINQ来投影类和数据,如

            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 }

答案 1 :(得分:0)

使用getElementsByClassName识别父级,然后查找后代。

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