次のノードを選択します。html Agility pack C#

c# filtering html-agility-pack regex

質問

私は初めてhtmlagilitypackで働いている学生です。私は現在、値を取得するためにHTMLをフィルタリングしています

foreach (HtmlNode link in bodyNode.SelectNodes("//span[@class='content-b']"))
{
    if (link.InnerText.Contains("Name"))
    {
        //MessageBox.Show("Found");
        textBox1.Text += "Name : " + ?????;
    }

    textBox1.Text += link.InnerText;
}

ご覧のとおり、現在のノードに値 "NAME"が含まれているかどうかを確認しています。その場合は、次のノードの値を取得します。あなたが私を助けてくれれば、とても感謝しています。

名前の値は次のノードにあります。 <div class='content-b'>THIS IS MY NAME</div>です。 <div class='content-b'>THIS IS MY NAME</div> .. C#

ありがとうございました。


更新:これは、私はそれを助けることができない申し訳ありません醜い見える、と働いているHTMLコードの断片です

foreach (HtmlNode link in bodyNode.SelectNodes("//span[@class='content-b']"))
{
    if (link.InnerText.Contains("Name"))
    {
        //MessageBox.Show("Found");
        textBox1.Text += "Name : " + ?????;
    }

    textBox1.Text += link.InnerText;
}

ありがとうございました。

受け入れられた回答

まず、ドキュメントにclass="content-b"はありません。それらはすべてcontet-bと綴られています。

第2に、htmlが整形式でないため、 NextSiblingは機能しません。条件に一致する次のノードを手動で取得する必要があります。この状況では、 foreachループは使用できません。

結果は次のとおりです。

var nodes = bodyNode.SelectNodes("//div[@class='contet-b']").ToList();
for( int i =0; i < nodes.Count; i++)
{
    var link = nodes[i];
    if (link.InnerText.Contains("Name"))
    {
        textBox1.Text += "Name : ";
        if (i + 1 < nodes.Count)
        {
            // append the value of next matching `div` node
            textBox1.Text += nodes[i + 1].InnerText.Trim();
            i++; // skip this node
        }
    }
}

人気のある回答

あなたが探しているのは、ノードのNextSiblingプロパティです。あなたの例では:

foreach (HtmlNode link in bodyNode.SelectNodes("//div[@class='content-b']"))
{
    if (link.InnerText.Contains("Name"))
    {
        //MessageBox.Show("Found");
        textBox1.Text += "Name : " + link.NextSibling.InnerText;
    }

    textBox1.Text += link.InnerText;
}



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