HtmlAgilityPack은 내부의 모든 가치를 얻습니다.

c# html html-agility-pack xpath

문제

나는 웹 사이트에서 가치를 얻으려고하고있다. 값은 div 내부에 있으며, "main div"아래에 div가 더 있습니다 (이 값을 이와 같이 부를 수있는 경우). 내가 원하는 것은 divs가 "main div"내부에서 가치있는 것을 얻는 것입니다. 이 코드로 시도 :

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

웹 사이트 구조 (F12 실행 시간 동안)는 다음과 같습니다.

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

foreach에 대한 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"오류가 나타납니다.

인기 답변

제공된 HTML 스 니펫을 사용하여 XPath 선택기를 사용하여 텍스트 노드를 직접 가져올 수 있습니다.

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

산출:

00
01
02
03
04


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.