HtmlAgility 특정 이름의 하위 클래스가 있는지 확인

c# html-agility-pack

문제

<li class="sn-g">
     <span class="num">1</span>
     <span class="sym_first">
          <a class="icon>&nbsp;</a>
     </span>
     <span class="def">...text</span>
</li>

내 HTML 페이지에는 이러한 하위 클래스가 포함되어 있습니다. 그러나 sym_first 클래스는 항상 존재하지 않습니다. HTMLAgility 사용 sym_first 클래스가 웹 페이지에 있는지 여부를 확인하고자합니다. 존재하는 경우 def 클래스에서 InnerText를 가져오고 싶습니다.

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span[@class='" + sng + "']"))
{
   //How do I write this block?
   if(doc.DocumentNode.SelectNodes("//span[@class='" + symfirst + "']").Contains(xxx)
   {
      //get inner text
   }
} 

인기 답변

SelectSingleNode() 사용하여 반환 값이 null 이 아닌지 확인할 수 있습니다.

if(doc.DocumentNode.SelectSingleNode("//span[@class='sym_first']") != null)
{
    //get inner text
}

또는 현재 li 내에서 sym_first 클래스를 확인 sym_first 경우 (문제의 코드 스 니펫에서 li 을 반복한다고 가정)

if(node.SelectSingleNode("span[@class='sym_first']") != null)
{
    //get inner text
}

업데이트 :

아래의 주석에보고 된 오류에 대한 응답으로 def 클래스가 있는지 확인하십시오.

var sym_first = node.SelectSingleNode("span[@class='sym_first']");
var def = node.SelectSingleNode("span[@class='def']");
if(sym_first != null && def != null)
{
    //get inner text
}

요구 사항에 따라 처음부터 다음과 같은 특정 내용을 가진 li 요소를 통해서만 반복 할 수 있습니다.

var query = "//li[@class='sn-g'][span[@class='sym_first'] and span[@class='def']]";
foreach (HtmlNode node in doc.DocumentNode.SelectNodes(query))
{
   //get inner text
} 


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