0

以下の表を解析しようとしていますが、残念ながら、各ノードは互いにネストされているようです。:(常にカウント=1を与えているため、子ノードを取得することはできません

それは本当に興味深いですが、それは発見です。たとえば、前のtrの子ノードとしての次の「tr」?

何か考えはありますか?

<table width="292px" border="0">
    <tr>
        <td>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr>
                    <td colspan="2" bgcolor="#FBCE9D" align="center" height="40">
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#FFF4D2" height="25" width="60">
                    </td>
                    <td height="25" bgcolor="#e8e8e8">
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#FFF4D2" height="25" width="60">
                    </td>
                    <td height="25" bgcolor="#e8e8e8">
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#FFF4D2" height="25" width="60">
                    </td>
                    <td height="25" bgcolor="#e8e8e8">
                    </td>
                </tr>
                <tr>
                    <td bgcolor="#FFF4D2" height="25" width="60">
                    </td>
                    <td height="25" bgcolor="#e8e8e8">
                    </td> //Here is a missing "</tr>" and I think this one is confusing the agilitypack!
                    <tr>
                        <td bgcolor="#FFF4D2" height="35" colspan="2" align="center">
                        </td>
                    </tr>
            </table>
        </td>
    </tr>
</table>

私のコードは次のとおりです。

var webGet = new HtmlWeb();
var doc = webGet.Load("the url where this table is located");
HtmlNodeCollection tb = doc.DocumentNode.SelectNodes("//table[@width='292px']");
                        var table = tb[0].ChildNodes[1].ChildNodes[0].ChildNodes[0].ChildNodes;
                        for (var na = 0; na < table.Count; na++)
                        { .....do the work.... }

実際、このコードは以前は魅力のように機能していましたが、常にChildNodes[1]存在しないため、その中に別のテーブルをネストしてスタックしていますか?ChildNodes[1]ChildNodes[0]

もう1つ注意してください。Firebugは、ネストされたテーブルのXPathとして「/ html / body / table / tbody / tr [2] / td / table / tbody」を表示しますが、「tbody」は動的に生成されるため、htmlagilityに精通していないことに気付くかもしれません。欠落しているクローズタグ/trを削除するブラウザ

4

2 に答える 2

1

とても興味深いのですが、問題は Nuget で実際に入手できる HmtlAgility パックでした。それを削除して、Web からダウンロードしました ( http://htmlagilitypack.codeplex.com/ )。それは今働いています!

于 2012-04-17T11:36:35.387 に答える
0

XPATHここで大いに役立ちます。

内部テーブルtrノードの場合、以下でこれを試すことができます

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr")

td内部テーブル内のノードをトラバースする場合は、

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr/td")
于 2012-04-13T07:17:41.260 に答える