Пакет гибкости C # HTML / PHP Simple Dom Parser

#c# #php #parsing #xpath

#c# #php #синтаксический анализ #xpath

Вопрос:

У меня есть рабочая инструкция на PHP с использованием простого dom parser, которую я хочу преобразовать в C # с помощью HTML Agility Pack.

Я действительно испытываю трудности и не смог получить ничего, даже близкого к работе.

Вот HTML, над которым я работаю: www.amazon.com/gp/offer-listing/B002UYSHMM/

Вот мой код PHP DOM Parser, который я хочу преобразовать в C#:

 foreach($html->find('div.resultsset table tbody.result tr') as $article) 
{ 
   if($article->find('span.price', 0)) 
   {  
      // get retail  
      $item[$retail.$i  ] = $article->find('span.price', 0)->plaintext;  
      // get soldby

      if($article->find('img', 0)->getAttribute('alt') <> '') 
      {
         $item[$soldby.$j  ] = $article->find('ul.sellerInformation img', 0)->getAttribute('alt'); 
      }
      else 
      {
         $item[$soldby.$j  ] = $article->find('ul.sellerInformation li a b', 0)->plaintext; 
      }

      $ret['SellerInfo'] = $item;
   }  
}
  

Если кто-нибудь может помочь, я был бы очень признателен!

Ответ №1:

Я никогда не использовал селекторы CSS с HtmlAgilityPack, но используя xpath (который работает аналогично, но с другим синтаксисом), он работает следующим образом:

 HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);
doc.DocumentNode.SelectSingleNode(@"id('content')/div/div[1]/");
  

На самом деле это все. Вы можете использовать LINQ для обработки коллекций, когда вы не используете SelectSingleNode(). Итак, чтобы взять ваш пример и применить его на практике:

 HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);
var price = Decimal.Parse(doc.DocumentNode.SelectSingleNode(@"id('price')").InnerText);
// etc...
  

Если вам нужна помощь в поиске XPath определенного элемента dom, есть отличный плагин для Firefox с именем XPath Checker, который мгновенно предоставит вам XPath любого элемента dom, щелкнув правой кнопкой мыши. Мне было очень полезно работать с HtmlAgilityPack.