我有这个html表:
<div style="width: 398px;">
<table cellpadding="4" cellspacing="0" width="100%" style="border: 2px solid #ffffff;">
<tbody>
<tr class="parrafo-ver-negro">
<th class="borde-abajo borde-derecha" style="text-align: left;">Parada Nº</th>
<th class="borde-abajo" style="text-align: left;">Destino</th>
</tr>
<tr>
<td class="borde-derecha"><a class="parrafo-ver-negro link-nro-sms">5729</a></td>
<td class="parrafo_ver-gris letra9">103 NEGRO > Villa Gdor. Galvez<br>103 ROJO > Villa Gdor. Gálvez<br></td>
</tr>
<tr>
<td class="borde-derecha"><a class="parrafo-ver-negro link-nro-sms">5292</a></td>
<td class="parrafo_ver-gris letra9">103 NEGRO > Granadero Baigorria<br>103 ROJO > Mini Terminal Barrio Rucci<br></td>
</tr>
</tbody>
</table>
</div>
我的代码是:
public static List<Parada> parsear(string html)
{
int cual;
int _parada;
string _destino;
List<Parada> lp = new List<Parada>();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode tabla in doc.DocumentNode.SelectNodes("//table"))
{
foreach (HtmlNode fila in tabla.SelectNodes("//tr"))
{
cual = 1; _parada = 0; _destino = "";
foreach (HtmlNode celda in fila.SelectNodes("//td"))
{
if (cual == 1)
{
_parada = Int32.Parse(celda.InnerText);
cual = 2;
}
else if (cual == 2)
{
_destino = celda.InnerText;
cual = 1;
lp.Add(new Parada(_parada, _destino));
}
}
}
}
return lp;
}
我最终会得到两个List of Parada的元素(我必须忽略的第一个TR,因为它是标题),而是我有6个,而不是两个。 代码有什么问题? 我尝试了很多东西,但结果相同。
感谢。
答案 0 :(得分:1)
fila.SelectNodes仍然遍历整个文档,因此您遍历所有4个td
节点3次(每tr
个节点一次)。请尝试使用此代码...
public static List<Parada> parsear(string html)
{
int cual = 0;
int _parada = 0;
string _destino = "";
List<Parada> lp = new List<Parada>();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode tabla in doc.DocumentNode.SelectNodes("//table//tr//td"))
{
cual = 1 - cual;
if (cual == 1)
{
_parada = Int32.Parse(tabla.InnerText);
}
else
{
_destino = tabla.InnerText;
lp.Add(new Parada(_parada , _destino));
}
}
return lp;
}