gpt4 book ai didi

c# - HtmlAgilityPack XPath 错误

转载 作者:行者123 更新时间:2023-11-30 18:37:51 24 4
gpt4 key购买 nike

我正在尝试使用 C# + XNA 和 HtmlAgilityPack 解析网页,但是当尝试根据本文中的示例解析表格时 HTML Agility pack - parsing tables

我遇到了一些非常奇怪的问题。这是我对另一篇文章稍作修改的代码:

foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
{
spriteBatch.DrawString(font, table.Id, new Vector2(0, num * 16), Color.Black);
num++;
foreach (HtmlNode row in table.SelectNodes("tr"))
{
spriteBatch.DrawString(font, "row", new Vector2(0, num * 16), Color.Black);
num++;
foreach (HtmlNode cell in row.SelectNodes("th|td"))
{
spriteBatch.DrawString(font, "cell: " + cell.InnerText, new Vector2(0, num * 16), Color.Black);
}
}

}

然而,当我用断点击中第一行时,我得到了一个奇怪的错误,我在这里截取了我的问题的屏幕截图: http://i.imgur.com/JxzJ9.png

但是,如果我删除断点,我只会在遇到第二个 foreach 循环时收到 NullReferenceException 错误。我假设我没有返回任何带有 XPath 的实际表,但第一个错误让我感到困惑。如果这只是 Xpath 问题,我会花更多时间尝试了解如何使用它。

这是我要解析的网页:

<div class="page">
<header>

<nav>
<ul id="menu">
<li><a href="/">Home</a></li>
<li><a href="/Home/About">About</a></li>
<li><a href="/Score">Scoreboard</a></li>
</ul>
</nav>
</header>
<section id="main">

<h2>High Scores</h2>
<div id="grid">
<table class="grid">
<thead>
<tr class="head">
<th scope="col">
<a href="/Score?sort=Name&amp;sortdir=ASC">Name</a>
</th>

<th scope="col">
<a href="/Score?sort=Points&amp;sortdir=DESC">Points</a>
</th>

<th scope="col">
<a href="/Score?sort=Date&amp;sortdir=ASC">Date</a>
</th>
</tr>
</thead>

<tbody>
<tr>
<td>sec_goat</td>
<td>10</td>
<td>9/8/1980 12:00:00 AM</td>
</tr>

<tr class="alt">
<td>tankorsmash</td>
<td>100</td>
<td>10/10/2010 12:00:00 AM</td>
</tr>

<tr>
<td>sec_goat</td>
<td>1000</td>
<td>8/12/2012 12:00:00 AM</td>
</tr>

<tr class="alt">
<td>tankorsmash</td>
<td>10000</td>
<td>12/12/2012 12:00:00 AM</td>
</tr>

<tr>
<td>sec_goat</td>
<td>100000</td>
<td>1/1/2013 12:00:00 AM</td>
</tr>

<tr class="alt">
<td>tankorsmash</td>
<td>1000000</td>
<td>9/18/2012 12:00:00 AM</td>
</tr>

<tr>
<td>bob</td>
<td>99999999</td>
<td>9/8/1980 12:00:00 AM</td>
</tr>

最佳答案

如果您使用以下代码,它会按预期工作:

var doc = new HtmlDocument();
doc.LoadHtml(HTML);
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
{
foreach (HtmlNode row in table.SelectNodes("//tr"))
{
foreach (HtmlNode cell in row.SelectNodes("th|td"))
{
//don't use .ChildNodes[1] in real code, only works for <th>.
Debug.WriteLine(cell.ChildNodes[1].InnerHtml);
}
}
}

如您所见,我将 XPath 语句从“tr”更改为“//tr”。如果您有兴趣更熟悉 XPath 语法,我会向您推荐此页面:http://www.w3schools.com/xpath/xpath_syntax.asp

关于c# - HtmlAgilityPack XPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com