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類(假設你在相關的代碼片段中循環遍歷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
} 


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow