Html 敏捷包 asp.net mvc Xpath

Html Agility Pack asp.net mvc Xpath

我有这个html: Picture with html code

我需要在我的视图中显示:Бавария Майнц -2.25

我试着写这个:

HtmlDocument htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(
                "https://www.parimatch.com/sport/futbol/germanija-bundesliga");

            foreach (HtmlNode table in htmlDoc.DocumentNode.SelectNodes("//div[@id='oddsNote']/table/tbody"))
            {
                foreach (HtmlNode row in table.SelectNodes("tr"))
                {
                    HtmlNodeCollection cells = row.SelectNodes("td");

                    if (cells == null)
                    {
                        continue;
                    }

                    foreach (HtmlNode cell in cells)
                    {
                        ViewBag.Results += cell.InnerText;
                    }
                }
            }

但我的 table 始终为空。我哪里出错了?
除了 Viewbag 之外,在 View 中输出的其他选项是什么?


我的HTML:

<div id ="z_container">
<div id = "Z_contentw">
<div id = "OddList">
<form name ="f1" id = "f1">
<div class = "container_grey">
<div class = "wrapper">
<table id = "4529899" class ="dt_twp">
  <tbody class ="row1 processed">
  <tr class ="bk">
  <td> "02/03"  <br>  "21:00"</td>
  <td class ="l"> <a class ="om" id ="a738">Bavaria  Mainc</a></td>
  <td> <b 3.5></td>
  </tr>
  </tbody>

  <tbody class ="row2 processed">
  <tr class ="bk">
  <td> "03/03"  <br>  "19:00"</td>
  <td class ="l"> <a class ="om" id ="a739">Roma  Milan</a></td>
  <td> <b 2.5></td>
  </tr>
  </tbody>
</table>
</div>
</div>
</form>
</div>
</div>
</div>

我需要显示:02/03 21:00 Bavaria Mainc 03/03 19:00 Roma Milan

你的 xpath 有一个 id 不在你提供的 html 中 如果你想要一行中的文本,那么它可以是

  var text =  string.Join(" ", doc.DocumentNode.SelectNodes("//tr[@class='bk']//text()[normalize-space()]").Select(t=>t.InnerText));

如果你想对数据建模然后使用 td 的索引,第一个有时间第二个有团队所以创建一个简单的模型

class FootballMatch
{
   public string Time;
   public string Teams;
}

并使用以下方法获取数据

var matches = doc.DocumentNode.SelectNodes("//tr[@class='bk']").
                Select(tr => new FootballMatch() {
                    Time = string.Join(" ", tr.SelectNodes("./td[1]//text()").Select(t => t.InnerText)),
                    Teams = tr.SelectSingleNode("./td[2]//text()[normalize-space()]").InnerText,
            });