<div class="outer">
<div class="divOne"></div>
<div class="divContent">
<h3>SomeTitle</h3>
<h4>SomeSubtitle</h4>
<ul>
<li><a href="/someUrlx.htm">SomeUrl</a>
<span> Nr of records under this url </span>
</li>
</ul>
<h4>Some Other Subtitle</h4>
<ul>
<li><a href="/someUrlx.htm">SomeUrl</a>
<span> Nr of records under this url </span>
</li>
</ul>
</div>
</div>
한 번 더, 위의 html 구조 아래의 모든 정렬되지 않은 목록 항목을 가져 오려고합니다.
divContent 클래스 내용을 가져올 수 있어요.
var regs = htmlDoc.DocumentNode.SelectSingleNode(@"//div[@class='outer']");
var descendant = regs.Descendants()
.Where(x => x.Name == "div" && x.Attributes["class"].Value == "divContent")
.Select(x => x.OuterHtml);
이제 ul li 항목을 가져 오는 표현이 필요합니다.
이 잘 작동합니다.
IEnumerable<string> listItemHtml = htmlDoc.DocumentNode.SelectNodes(
@"//div[@class='outer']/div[@class='divContent']/ul/li")
.Select(li => li.OuterHtml);
예 : https://dotnetfiddle.net/fnDPLB
아래의 의견을 바탕으로 업데이트 :
값이 "SomeSubtitle"인 <h4>
요소의 직접 형제 인 <ul>
<li>
요소에 속한 <li>
요소 만 찾으려면 다음과 같이 작동하는 XPath 표현식을 사용하십시오.
//div[@class='outer'] // Get div.outer
/div[@class='divContent'] // under that div, find div.divContent
/h4[text()='SomeSubtitle'] // under div.divContent, find an h4 with the value 'SomeSubtitle'
/following::ul[1]/li // Get the first ul following the h4 and then get its li elements.