문제

htmlagilitypack 라이브러리를 사용하여 페이지에서 일부 링크를 구문 분석하려고하지만 방법에서 기대할 결과는 보이지 않습니다. 다음에는 링크의 htmlnodecollection이 있습니다. 각 링크에 대해 이미지 노드가 있는지 확인한 다음 칭호를 구문 분석하지만 LinkNode의 SelectNodes 및 SelectSingLenode 메소드는 LinkNode의 어린이가 아닌 부모 문서를 검색하는 것으로 보입니다.

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

foreach(HtmlNode linkNode in linkNodes)
{
    string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
    if (linkTitle == string.Empty)
    {
        HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]");     
    }
}

LinkNode의 이미지 자식의 ALT 속성을 얻을 수있는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

문서의 루트에서 시작하려는 것을 의미하므로 "/img [@alt]에서 ForwardSlash 접두사를 제거해야합니다.

HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");

다른 팁

XPath 쿼리를 사용하면 사용할 수 있습니다. " 검색이 현재 노드에서 시작해야합니다.

HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");

또한 Null Check를 조심하십시오. SelectNodes는 빈 컬렉션 대신 NULL을 반환합니다.

HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

**if(linkNodes!=null)**
{
   foreach(HtmlNode linkNode in linkNodes)
  {
     string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
     if (linkTitle == string.Empty)
     {
       **HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");**   
     }
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top