2015-02-08 4 views
0

Мне нужна помощь в анализе HTML-файла. Я новичок в C# и LINQ, и все я пытался не был преуспевающим в извлечении «ссылка» и «Name 1»Анализ HTML с использованием LINQ

 <tr class="Row"> 
       <td width="80"> 
       <div align="left"> <a href="link">details</a> 
       </div> 
       </td> 
       <td width="152">Name 1</td> 
       <td width="151">Name 2</td> 
       <td width="152">Name 3</td> 
       <td width="151">Name 4</td> 
       <td width="151">Name 5</td> 
       <td width="152">Name 6</td> 
     </tr> 

     <tr class="Row"> 
       <td width="80"> 
       <div align="left"> <a href="link">details</a> 
       </div> 
       </td> 
       <td width="152">Name 1</td> 
       <td width="151">Name 2</td> 
       <td width="152">Name 3</td> 
       <td width="151">Name 4</td> 
       <td width="151">Name 5</td> 
       <td width="152">Name 6</td> 
     </tr> 

Это то, что я пробовал:

   var links = htmlDoc.DocumentNode.Descendants() 
        .Where(n => n.Name == "tr") 
        .Where(x => x.Attributes["class"] != null && x.Attributes["class"].Value == "Row") 
        .Select(x => x.Descendants() 
        .Where(s => s.Name == "href")); 

       foreach (var link in links) 
       { 
        Debug.WriteLine(link); 
       } 
+0

Вы используете Html Agility Pack? – igorushi

+0

Я использую HtmlAgilityPack-PCL – Macaret

+0

проверить ответ и сказать мне, если что-то неясно – mybirthname

ответ

0
var nodes= htmlDoc.DocumentNode.Descendants() 
        .Where(n => n.Name == "a" || 
(n.Name == "td" && n.Attribute["width"] != null && n.Attribute["width"].Value != "80" && n.Parent.Name == "tr" && n.Parent.Attribute["class"] != null && n.Parent.Attribute["class"].Value = "Row")); 


       foreach (var node in nodes) 
       { 
        if(node.Attribute["href"] != null) 
        { 
         Debug.WriteLine(node.Attribute["href"].Value); 
        } 
        else 
        { 
         Debug.WriteLine(node.InnerText); 
        } 
       } 

Вам нужно что-то вроде этого. Вы принимаете каждый узел с именем или каждый td узел, ширина которого не 80, а tr родительский узел имеет class="Row"

+1

Благодарим за помощь – Macaret

+0

добро пожаловать – mybirthname

0

Ваш LINQ не отражает stucture HTML, в. Его можно просто достичь, используя xpath.

var links = htmlDoc.DocumentElement 
    .SelectNodes("//tr[class='Row']/td/div/a") 
    .Select(aElem=>aElem.Attributes["href"].Value) 
+0

Я не могу использовать Xpath, потому что мой проект - Windows Phone 8.1 – Macaret

Смежные вопросы