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