0

HtmlAgilityPackを使用して、2〜6個のテーブルをすべて含むDIV内から情報を抽出しようとしています。

同数のテーブルがあれば、問題なく情報を取得できます。

var thirdTable = res.SelectSingleNode("table[3]");

各テーブルにはtdsが含まれており、最初のテーブルには確認したい名前が含まれています。現時点ではそれはによって行われています

<table border="0" cellspacing="1" cellpadding="4" width="100%">
    <tbody>
        <tr bgcolor="#505050">
            <td colspan="2" class="white">
                <b>Character Deaths</b>
            </td>
        </tr>
    </tbody>
</table>

var charTest = thirdTable.ChildNodes[0].InnerText.StartsWith(checkInfo);

ただし、テーブルの数は時々異なるため、NullReferenceExceptionがないと情報を抽出できません。

テーブルの数を確認してから、どのテーブルが存在するかを確認するにはどうすればよいですか?

編集:

       var URLCharacter = "http://www..." + tbSearch.Text;
       HtmlAgilityPack.HtmlWeb doc = new HtmlAgilityPack.HtmlWeb();
       htmldocObject = doc.Load(URLCharacter);
       //Find the right contentdiv
       var res = htmldocObject.DocumentNode.SelectSingleNode("//div[@class='BoxContent']");
4

1 に答える 1

0

私がすることは、すべてのテーブルを選択し、最初の2つをスキップして、次のテーブル(3番目)を取得することによって、3番目のテーブルを取得しようとすることです。要素を取得した場合は、それを使用して必要な処理を実行します。それ以外の場合は、何も実行しません。

var thirdTable = res.Elements("table").Skip(2).FirstOrDefault();
if (thirdTable != null)
{
    // do stuff
}

Elements()メソッドの使用に問題がある場合はSelectNodes()、適切なxpathを使用して置き換えることができます。

var thirdTable = res.SelectNodes("table").Skip(2).FirstOrDefault();
于 2012-08-03T19:58:12.210 に答える