【问题标题】:Html Agility Pack asp.net mvc XpathHtml 敏捷包 asp.net mvc Xpath
【发布时间】:2016-03-02 18:00:06
【问题描述】:

我有这个 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;
                    }
                }
            }

但我的表总是空的。我哪里有错误?
除了 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

【问题讨论】:

  • 在这里发布 HTML,而不是图片 + 我看不到任何带有“oddsNote”@id 的 div

标签: asp.net-mvc xpath html-agility-pack


【解决方案1】:

您的 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,
            });

【讨论】:

  • 谢谢!我会试试这个然后写在那里,请明天看这个话题。
  • 但是如果我使用一行所有的作品,但我认为模型更正确。如果我使用一行,我会看到这个i64.tinypic.com/2vt8dv5.png
  • @andrey1567 我无法神奇地想象您的 Html 的样子,根据您提供的 html,它按预期工作,如果您需要进一步的帮助,请确保您处理HttpUtility.HtmlDecode 方法的文本并将您的 WebClient 实例编码设置为 UTF8
  • 是的,我做到了,它有效,但不幸的是只有一行。 Matches 为空,我会尝试确定这个问题。感谢您的帮助!
  • HttpUtility.HtmlDecode 只需要字符串参数和返回字符串。但是matches是IEnumerable。这是如何解决的?
猜你喜欢
  • 2016-06-01
  • 2015-02-16
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多