Sélectionnez le noeud suivant html Agility Pack C #

c# filtering html-agility-pack regex

Question

Je suis un étudiant qui travaille avec htmlagilitypack pour la première fois. Je filtre actuellement le code HTML pour obtenir les valeurs à l'aide de

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;
}

Comme vous pouvez le constater, je vérifie si le nœud actuel contient une valeur "NOM" et, si tel est le cas, je souhaite obtenir la valeur du nœud suivant à côté. Je serai très reconnaissant si vous pouvez m'aider avec cela.

La valeur du nom est dans le prochain nœud <div class='content-b'>THIS IS MY NAME</div> .

Je vous remercie.


Mise à jour: Voici le fragment de code html avec lequel je travaille, ça a l'air moche, je suis désolé, je ne peux pas m'en empêcher

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;
}

Je vous remercie.

Réponse acceptée

Tout d'abord, il n'y a pas class="content-b" dans votre document. Ils sont tous orthographiés comme contet-b .

Deuxièmement, étant donné que le NextSibling HTML n’est pas bien formé, NextSibling ne fonctionnera pas. Vous devez manuellement obtenir le prochain nœud correspondant aux critères. Vous ne pouvez pas utiliser une boucle foreach dans cette situation.

Voici le résultat:

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
        }
    }
}

Réponse populaire

Ce que vous cherchez, c'est la propriété NextSibling du noeud. Dans votre exemple:

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;
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi