HtmlAgilityPackネストした表をスキップまたは削除する

html-agility-pack

質問

HtmlAgilityPackを使用して、次のhtmlを取得します(ネストした表に気づく)。

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

さあ、親テーブルから情報を得る巧妙な方法と、ネストされたテーブルからの情報を見つけることを試みました。

これまでのところ、私は次のことがあります:

var parentTable = document.DocumentNode.SelectNodes("//table[@class='123']").FirstOrDefault();

var nestedTable = parentTable.SelectNodes("//table[@class='789']").FirstOrDefault();

私は今nestedTableで遊んで、私が欲しいものを得ることができます(abc、def)...

しかし、親テーブルから<tr>を取得しようとすると、次のようになります。

var parentTableRows = parentTable.SelectNodes(".//tr");

それは(コレクションに) <tr>ネスティングされたテーブルから同様に含まれているようだ...

言い換えれば、上記のhtmlコードによると、私は4 <tr>コレクションを持つことを期待していましたが、それはネストしたテーブルの<tr>含んでいるため、 6 <tr>コレクション。

ネストしたテーブルを保持する最初の<tr>スキップして 、私が欲しい情報(info1、info2、info3)を再生できるようにするにはどうすればいいですか(Ia€™m makingsenseâ€|)

前もって感謝します!

受け入れられた回答

//は、 "すべてのノードとサブノードをスキャンする"ことを意味するXPATH式です。そのため、 //trはすべてのtrをルートの下に//tr理由です。

parentTable.SelectNodes("tr") (または同等の"./tr" parentTable.SelectNodes("tr")だけを実行すると、ルートの下にあるすべてのTRが選択されます。

最初のものをスキップする場合は、要素のposition() (XPATH関数)にXPATHフィルタを追加できます。

var parentTableRows = parentTable.SelectNodes("tr[position() > 1]");


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