다음 노드를 선택하십시오. 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 로 철자가되어 있습니다.

둘째, 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는 합법적입니까? 예, 이유를 알아보십시오.