Span class = "floatClear" 에서 해당 요소의 A href를 얻고 싶습니다.
span class = "star-img stars_4"
어떻게하면 HtmlAgilityPack을 사용하여이 동작을 달성 할 수 있습니까? 내 파일의 HTML 소스를 제공합니다.
<div class="businessresult"> //will repeat
<div class="rightcol">
<div class="rating">
<span class="star-img stars_4">
<img height="325" width="84" src="http://media1.px" alt="4.0 star rating" **title**="4.0 star rating">
</span>
</div>
</div>
<span class="floatClear">
<a class="ybtn btn-y-s" href="/writeareview/biz/KaBw8UEm8u6war_loc%NY">
</span>
</div>
내가 작성한 질의
var lowestreview =
from main in htmlDoc.DocumentNode.SelectNodes("//div[@class='rightcol']")
from rating in htmlDoc.DocumentNode.SelectNodes("//div[@class='rating']")
from ratingspan in htmlDoc.DocumentNode.SelectNodes("//span[@class='star-img stars_4']")
from floatClear in htmlDoc.DocumentNode.SelectNodes("//span[@class='floatClear']")
select new { Rate = ratingspan.InnerText, AHref = floatClear.InnerHtml };
하지만 LINQ 쿼리 마지막 줄에 조건을 적용하는 방법을 모르겠습니다!
전체 htmlDoc에서 "rating"을 선택하지 말고 이전에 찾은 "main"에서 선택하십시오.
나는 당신이 다음과 같은 것을 필요로한다고 생각한다.
var lowestreview =
from main in htmlDoc.DocumentNode.SelectNodes("//div[@class='rightcol']")
from rating in main.SelectNodes("//div[@class='rating']")
from ratingspan in rating.SelectNodes("//span[@class='star-img stars_4']")
from floatClear in ratingspan.SelectNodes("//span[@class='floatClear']")
select new { Rate = ratingspan.InnerText, AHref = floatClear.InnerHtml };
일부 divs ans span이없는 경우 충돌이 발생하지 않기를 바랍니다. 이전 버전의 HtmlAgilityPack에서는 SelectNodes
가 아무 것도 찾지 못했을 때 빈 목록 대신 null을 반환했습니다.
편집하다
내부 선택을위한 "xpath 쿼리"를 변경해야 할 수도 있습니다. "//"를 ".//"(처음에는 추가.)로 변경하여 실제로 하위 노드가 있음을 알립니다. AgilityPack이 일반 XML-XPath와 똑같이 작동한다면 (나는 100 % 확실하지 않다), 처음에 "//"는 서브 노드에서 지정하더라도 문서 루트에서 검색합니다. ".//"는 항상 검색중인 노드에서 검색합니다.
main.SelectNodes("//div[@class='rating']")
는 이전 줄에서 찾은 <div class="rightcol">
외부의 <div class="rightcol">
<div class="rating">
. main.SelectNodes(".//div[@class='rating']")
는이를 수정해야합니다.