Синтаксис XPath SelectSingleNode и SelectNodesC#

Место общения программистов C#
Ответить
Anonymous
 Синтаксис XPath SelectSingleNode и SelectNodes

Сообщение Anonymous »

Мой вопрос очень похож на этот синтаксис XmlNode.SelectSingleNode для поиска внутри узла в C#

Я пытаюсь использовать HTML Agility Pack для получения цены/условия/цены доставки... Вот URL-адрес, который я очищаю: http://www.amazon.com/gp/offer-listing/ ... dition=all

Вот фрагмент моего кода:


Код: Выделить всё

    string results = "";
var w = new HtmlWeb();
var doc = w.Load(url);
var nodes = doc.DocumentNode.SelectNodes("//div[@class='a-row a-spacing-medium olpOffer']");

if (nodes != null)
{
foreach (HtmlNode item in nodes)
{
var price = item.SelectSingleNode(".//span[@class='a-size-large a-color-price olpOfferPrice a-text-bold']").InnerText;
var condition = item.SelectSingleNode(".//h3[@class='a-spacing-small olpCondition']").InnerText;
var price_shipping = item.SelectSingleNode("//span[@class='olpShippingPrice']").InnerText;
results += "price " + price + " condition " + condition + " ship " + price_shipping + "\r\n";
}
}
return results;
Независимо от того, какую комбинацию .// и . и ./ и / и т. д... Я не могу получить то, что хочу (сейчас пытаюсь изучить xpaths), также в настоящее время он возвращает только 1-й элемент снова и снова, как и исходный вопрос, на который я ссылался ранее. Я думаю, что мне не хватает фундаментального понимания того, как работает выбор узлов и/или что считается узлом.



ОБНОВЛЕНИЕ



Хорошо, я изменил URL-адрес, чтобы он указывал на другую книгу, и первые два элемента работают так, как ожидалось... Когда я пытаюсь изменить третий элемент (price_shipping) на ".//" Абсолютно нет информация извлекается из чего угодно. Должно быть, это связано с тем, что иногда даже не указана цена доставки, и этот интервал опущен. Как мне с этим справиться? Я пробовал, если цена_доставка !=нуль.



ОБНОВЛЕНИЕ



Решено. Я удалил ".InnerText" из Price_shipping, который вызывал проблемы, когда он был нулевым... затем я выполнил нулевую проверку, и тогда можно было безопасно использовать .InnerText.

Подробнее здесь: https://stackoverflow.com/questions/181 ... ath-syntax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»