wähle den nächsten Knoten html Agility pack C #

c# filtering html-agility-pack regex

Frage

Ich bin ein Student, der zum ersten Mal mit htmlagilitypack arbeitet. Ich filtere derzeit den HTML-Code, um die Werte zu erhalten

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

Wie Sie sehen können, überprüfe ich, ob der aktuelle Knoten einen Wert "NAME" enthält und wenn ja, möchte ich den Wert des nächsten Knotens daneben bekommen. Ich werde sehr dankbar sein, wenn Sie mir dabei helfen können.

Der Wert des Namens ist im nächsten Knoten <div class='content-b'>THIS IS MY NAME</div> .. wie kann ich C # problematisch sagen, um den nächsten Knoten vor dem erneuten Looping zu bekommen?

Vielen Dank.


Update: Hier ist das HTML-Code-Fragment, mit dem ich arbeite, es sieht hässlich aus, es tut mir leid, ich kann nicht anders

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

Vielen Dank.

Akzeptierte Antwort

Erstens gibt es in Ihrem Dokument keine class="content-b" . Sie werden alle als contet-b .

Zweitens wird NextSibling nicht funktionieren, da der HTML- NextSibling nicht gut NextSibling ist. Sie müssen den nächsten Knoten, der den Kriterien entspricht, manuell abrufen. Sie können in dieser Situation keine foreach Schleife verwenden.

Hier ist das Ergebnis:

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

Beliebte Antwort

Was Sie suchen, ist die Eigenschaft NextSibling des Knotens. In Ihrem Beispiel:

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



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum