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 на веб-странице. Если он существует, я хочу получить InnerText из класса def .

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
}

или если вы хотите проверить класс sym_first в текущем li (предполагая, что вы перебираете 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