0

次のようなテーブルがあります。

<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アジリティパックを使用しています。このコードを試しましたが、期待した結果が返されません: コードは次のとおりです:

foreach (HtmlNode tr in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
            {
                //looping on each row, get col1 and col2 of each row
                HtmlNodeCollection tds = tr.SelectNodes("td");
                for (int i = 0; i < tds.Count; i++)
                {
                    Response.Write(tds[i].InnerText);
                }
            }

返された内容を処理したいので、各列を取得しています。

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

4

2 に答える 2

1

外側の foreach ループ内からセルの内容を取得できます。

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

また、内部テキストをトリミングして非エンティティ化して、クリーンであることを確認することをお勧めします。

Response.Write(HtmlEntity.DeEntitize(td.InnerText).Trim())

ソースでは、[Age: 78] と [Age: 92] のセル<th>の先頭にタグがあり、代わりに<td>

于 2013-02-20T20:36:44.437 に答える
0

これが私の解決策です。TH次の場所があるため、HTML が適切にフォーマットされていないことに注意してくださいTD

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

そして、これはc#コードです:

using HtmlAgilityPack;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
            document.Load("page.html");

            List<HtmlNode> x = document.GetElementbyId("table2").Elements("tr").ToList();

            foreach (HtmlNode node in x)
            {
                List<HtmlNode> s = node.Elements("td").ToList();
                foreach (HtmlNode item in s)
                {
                    Console.WriteLine("TD Value: " + item.InnerText);
                }
            }
            Console.ReadLine();
        }
    }
}

スクリーンショット: ここに画像の説明を入力

編集:タグを使用する場合は、<th>タグ内にタグを含める必要があることを追加する必要があり<thead>ます。次に、行をタグ内に含めて<tbody>、html が適切にフォーマットされるようにします:)

詳細: http://www.w3schools.com/tags/tag_thead.asp

于 2013-02-20T22:25:12.567 に答える