내부 HTML 구문 분석

c# html-agility-pack html-parsing

문제

이것은 내가 분석하고 싶은 것이다.

<div class="photoBox pB-ms">
<a href="/user_details?userid=ePDZ9HuMGWR7vs3kLfj3Gg">
<img width="100" height="100" alt="Photo of Debbie K." src="http://s3-media2.px.yelpcdn.com/photo/xZab5rpdueTCJJuUiBlauA/ms.jpg">
</a>
</div>

다음 XPath를 사용하여 찾으려고합니다.

<div class="photoBox pB-ms">
<a href="/user_details?userid=ePDZ9HuMGWR7vs3kLfj3Gg">
<img width="100" height="100" alt="Photo of Debbie K." src="http://s3-media2.px.yelpcdn.com/photo/xZab5rpdueTCJJuUiBlauA/ms.jpg">
</a>
</div>

이것은 괜찮아요, 돌아오고, 나 모든 div, photobox 클래스와 함께

하지만 내가 ahref를 얻기 위해

<div class="photoBox pB-ms">
<a href="/user_details?userid=ePDZ9HuMGWR7vs3kLfj3Gg">
<img width="100" height="100" alt="Photo of Debbie K." src="http://s3-media2.px.yelpcdn.com/photo/xZab5rpdueTCJJuUiBlauA/ms.jpg">
</a>
</div>

잘못된 토큰 오류가 있습니다.

또한 쿼리를 사용해 보았습니다.

<div class="photoBox pB-ms">
<a href="/user_details?userid=ePDZ9HuMGWR7vs3kLfj3Gg">
<img width="100" height="100" alt="Photo of Debbie K." src="http://s3-media2.px.yelpcdn.com/photo/xZab5rpdueTCJJuUiBlauA/ms.jpg">
</a>
</div>

아무도 XPath 또는이 AHref를 얻기 위해 쿼리를 작성하는 방법을 말해 줄 수 있습니까?

수락 된 답변

이것은 작동합니다 (테스트 됨).

HtmlNodeCollection bodyNodes = htmlDoc.DocumentNode
                                      .SelectNodes("//div[@class='photoBox pB-ms']/a[@href]");
foreach(var node in bodyNodes)
{
    string href = node.Attributes["href"].Value;
}

문제는 애트리뷰트와 엘레멘트 선택자가 섞여 있다는 것입니다. 또한 컬렉션 에서 쿼리를 수행할지 여부도 분명하지 않습니다.

는 XPath 선택은 위의 모든 선택됩니다 이 요소 a href 의 자식 노드입니다 속성 div 의 클래스 요소 'photoBox pB-ms' . 그런 다음이 컬렉션을 반복하고 각 요소의 href 속성 값을 가져올 수 있습니다.

또한 HtmlAgilityPack은 이제 Linq (1.4 이후)를 지원하므로 특정 속성 값을 얻는 것이 다음과 같이 훨씬 쉽게 (imo) 수행 될 수 있습니다.

HtmlNodeCollection bodyNodes = htmlDoc.DocumentNode
                                      .SelectNodes("//div[@class='photoBox pB-ms']/a[@href]");
foreach(var node in bodyNodes)
{
    string href = node.Attributes["href"].Value;
}

인기 답변

XML 구문 분석 대신 HTMLAgilePack 을 사용할 수 있습니다.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml([HTML Text]);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
    HtmlAttribute att = link["href"];
    // att.Value
}



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