C#HtmlAgilityPack特定のh2からテーブルを選択する

c# html html-agility-pack parsing

質問

私はいくつかのhtmlを持っている:

<h2>Results</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>

<h2>Grades</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>

私はどのようにテーブルを "結果"

私はもう試した:

        var nodes = doc.DocumentNode.SelectNodes("//h2");

        foreach (var o in nodes)
        {
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }

それは動作しますが、それはまた、グレードh2の下にテーブルを取得します。

受け入れられた回答

divはヘッダ内に階層的に存在しないので、そこを探すのは意味がないことに注意してください。

これはあなたのために働くことができます - それはタイトルの次の要素を見つけます:

if (o.InnerText.Equals("Results"))
{
    var nextDiv = o.NextSibling;
    while (nextDiv != null && nextDiv.NodeType != HtmlNodeType.Element)
        nextDiv = nextDiv.NextSibling;
    // nextDiv should be correct here.
}

より具体的なxpathを書いて、そのdivだけを見つけることもできます:

doc.DocumentNode.SelectNodes("//h2[text()='Results']/following-sibling::div[1]");

人気のある回答

 var nodes = doc.DocumentNode.SelectNodes("//h2");

        if (nodes.FirstOrDefault()!=null)
        {
            var o=nodes.FirstOrDefault();
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }


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