سؤال

وأنا محاولة لاستخدام المكتبة HtmlAgilityPack تحليل بعض الروابط في الصفحة، ولكن أنا لا نرى نتائج أتوقع من الطرق. في ما يلي لدي HtmlNodeCollection الروابط. لكل وصلة أريد للتحقق مما إذا كان هناك عقدة الصورة ثم تحليل attribures ولكن في SelectNodes وأساليب SelectSingleNode من linkNode يبدو أن البحث في الوثيقة الأصلية ليست childNodes من 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]");     
    }
}

هل هناك أي طريقة أخرى أتمكن من الحصول على سمة بديل للchildnode صورة linkNode إذا كان موجودا؟

هل كانت مفيدة؟

المحلول

ويجب إزالة البادئة forwardslash من "/ IMG [alt]" كما أنه يدل على أنك تريد أن تبدأ في جذور هذه الوثيقة.

HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");

نصائح أخرى

ومع استعلام XPath يمكنك أيضا استخدام "." للإشارة إلى بحث ينبغي أن تبدأ في العقدة الحالية.

HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");

وأيضا، احترس من تحقق خالية. SelectNodes يعود لاغية بدلا من جمع فارغة.

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]");**   
     }
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top