0

私はこの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&ordm;</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 の 2 つの要素 (最初の TR はヘッダーなので無視する必要があります) になるはずですが、代わりに 2 つではなく 6 つになっています。コードの何が問題になっていますか? 私は多くのことを試しましたが、同じ結果でした。

ありがとう。

4

1 に答える 1

1

fila.SelectNodes は引き続きドキュメント全体を反復処理するため、4 つのtdノードすべてを 3 回 (trノードごとに 1 回) 反復処理します。代わりにこのコードを試してください...

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;
}
于 2012-11-14T19:18:37.990 に答える