HtmlAgilityPack erhält alle Werte innerhalb von a

c# html html-agility-pack xpath

Frage

Ich versuche Werte von einer Website zu bekommen. Die Werte sind innerhalb eines div, wobei div unter diesem "main div" liegt (wenn ich es so nennen kann). Was ich möchte, ist, diese Divs Wert thats im "Main Div" zu bekommen. Ich habe es mit diesem Code versucht:

 string url = "www.examplesite.com";

    HtmlWeb web = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load(url);
    HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//div[@id='plex_container']");
    foreach (HtmlNode node in collection)
    {
        string cptitle = node.SelectSingleNode(".//div[@id='pltexts']").InnerText;
        listBox1.Items.Add(cptitle);
    }

Die Struktur der Website (während der F12-Laufzeit) sieht folgendermaßen aus:

    <body onload="initialize()" id="dashboard">
<div id="header">...</div>
     <div id="dashboard_container">
         <div id="comm" class="comm_expanded">
            <div id="pl_header_tab">...</div>
            <div id="pltext_tab">...</div>
            <div id="plex_container">
                <div id="pl_status"></div>
                <div id="pltexts">
                   <div class="plext">...</div> // <-- Im trying to get these values
                   <div class="plext">...</div> // <-- 
                   <div class="plext">...</div> // <-- 
                   <div class="plext">...</div> // <--
                   <div class="plext">...</div> // <--

Ich bekomme "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt" -Fehler für die foreach ...

Beliebte Antwort

Mithilfe des bereitgestellten HTML-Snippets können Sie einen XPath-Selektor verwenden, um die Textknoten direkt abzurufen:

var html =
@"
<body onload='initialize()' id='dashboard'>
<div id='header'>...</div>
<div id='dashboard_container'>
<div id='comm' class='comm_expanded'>
<div id='pl_header_tab'>...</div>
<div id='pltext_tab'>...</div>
<div id='plex_container'>
<div id='pl_status'></div>
<div id='pltexts'>
<div class='plext'>00</div>
<div class='plext'>01</div>
<div class='plext'>02</div>
<div class='plext'>03</div>
<div class='plext'>04</div>
</div>
</div>
</div>
</div>
</body>";
var document = new HtmlDocument();
document.LoadHtml(html);
var textNodes = document.DocumentNode.SelectNodes(
    "//div[@id='pltexts']/div[@class='plext']/text()"
);
if (textNodes != null)
{
    foreach (var t in textNodes) Console.WriteLine(t.InnerText);
}

Ausgabe:

00
01
02
03
04


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