#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.