C# + XNA および HtmlAgilityPack を使用して Web ページを解析しようとしていますが、この投稿の例に基づいてテーブルを解析しようとすると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);
}
}
}
ただし、ブレークポイントで最初の行に到達すると、奇妙なエラーが発生します。ここで問題のスクリーンショットを撮りました。
ただし、ブレークポイントを削除すると、2 番目の 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&sortdir=ASC">Name</a>
</th>
<th scope="col">
<a href="/Score?sort=Points&sortdir=DESC">Points</a>
</th>
<th scope="col">
<a href="/Score?sort=Date&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>