htmlagilitypack 예상대로 아동 노드를 선택합니다
-
21-08-2019 - |
문제
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]");**
}
}
}
제휴하지 않습니다 StackOverflow