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クラスがWebページに存在します。存在する場合は、 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でないかどうかを調べることができ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
} 


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ