テーブルの行と列を介してHTMLのアジリティパックのループ

.net c# html-agility-pack

質問

私はこのようなテーブルを持っている

<table border="0" cellpadding="0" cellspacing="0" id="table2">
    <tr>
        <th>Name
        </th>
        <th>Age
        </th>
    </tr>
        <tr>
        <td>Mario
        </td>
        <th>Age: 78
        </td>
    </tr>
            <tr>
        <td>Jane
        </td>
        <td>Age: 67
        </td>
    </tr>
            <tr>
        <td>James
        </td>
        <th>Age: 92
        </td>
    </tr>
</table>

また、HTML Agility Packを使用して解析したい私は無駄にこのコードを試した:

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
{
    foreach (HtmlNode col in row.SelectNodes("//td"))
    { 
        Response.Write(col.InnerText); 
    }
}

私は間違って何をしていますか?

受け入れられた回答

私は完全なxpathを提供しなければならなかった。 @Coda( https://stackoverflow.com/a/3104048/1238850 )の提案からFirebugを使用して完全なxpathを取得しましたが、このコードで終了しました:

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("/html/body/table/tbody/tr/td/table[@id='table2']/tbody/tr"))
{
    HtmlNodeCollection cells = row.SelectNodes("td");
    for (int i = 0; i < cells.Count; ++i)
    {
        if (i == 0)
        { Response.Write("Person Name : " + cells[i].InnerText + "<br>"); }
        else {
            Response.Write("Other attributes are: " + cells[i].InnerText + "<br>"); 
        }
    }
}

私はそれがこれより良い方法で書かれることができると確信していますが、今私のために働いています。


人気のある回答

私はコードを実行しました。これは、 年齢が無効なHTML: <th></td> (おそらくタイプミス)を使用して定義されているため、正しい名前のみが表示されます。

ところで、コードは1つのループだけに簡略化できます。

foreach (var cell in doc.DocumentNode.SelectNodes("//table[@id='table2']/tr/td"))
{
    Response.Write(cell.InnerText);
}

ここで私がテストに使ったコードは次のとおりです: http : //pastebin.com/euzhUAAh




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ