Htmlagilitypack возвращает нулевое значение для documentnode. selectnodes
Всем привет,
У меня есть проблема с использованием HtmlAgilityPack в моем приложении.
В общем, с помощью SQL-запроса я выбираю " sku " из своей таблицы и помещаю результат в массив (skuNotebook).
Используя for, я создаю пользовательский url-адрес, используя значение sku. Моя проблема заключается в том, когда DocumentNode.SelectNodes возвращает нулевое значение, потому что это вызывает исключение. Но отладка заканчивается до того, как войти в управление "если значение равно null".
Это мой код:
<pre>string connString = "Data Source=192.168.50.; Network Library=DBMSSOCN; Initial Catalog = ; User ID=; Password=;"; SqlConnection connessione = new SqlConnection(connString); SqlCommand cmdNotebook = new SqlCommand("SELECT sku FROM ListinoMagento WHERE attribute_set = 'Notebook' AND price > 0", connessione); connessione.Open(); SqlDataReader reader = cmdNotebook.ExecuteReader(); List<string> skuNotebook = new List<string>(); while (reader.Read()) { skuNotebook.Add(reader.GetValue(0).ToString()); } reader.Close(); connessione.Close(); string url = ""; for (int i = 0; i < skuNotebook.Count; i++) { //NOTEBOOK OTHER MODELS url = "http://www.trovaprezzi.it/prezzo_notebook_" + skuNotebook[i].ToString() + ".aspx"; HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb(); HtmlAgilityPack.HtmlDocument doc = web.Load(url); if (doc.DocumentNode.SelectNodes("//div[@class='item_basic_price'] | //span[@class='merchant_name']").ToList() == null) { i++; } else { var Risultati = doc.DocumentNode.SelectNodes("//div[@class='item_basic_price'] | //span[@class='merchant_name']").ToList(); for (int j = 0; j < Risultati.Count; j++) { string[] riga = { skuNotebook[i].ToString(), Risultati[j].InnerText, Risultati[j + 1].InnerText }; dgvPrezzi.Rows.Add(riga); j++; } } }
Надеюсь, кто-нибудь сможет мне помочь.
Король С Уважением.
Что я уже пробовал:
Мне нужно это сделать: если
DocumentNode.SelectNodesвозвращает нулевое значение, затем пропускает, иначе добавляет строку в мой datagridview (dgvPrezzi)
Richard MacCutchan
Скорее всего, потому что либо doc равен null, либо SelectNodes возвращает null. Добавьте в свой код правильную проверку ошибок.
Member 10558090
Код верен, потому что работает для каждого sku, присутствующего на сайте, который я хочу проанализировать. Проблема заключается в том, что sku не существует на веб-сайте.
Я покажу вам две ссылки, может быть, объясню:
Строительство: http://www.trovaprezzi.it/prezzo_desktop_x3j70et$23abz.aspx-файл
Не работает: http://www.trovaprezzi.it/prezzo_desktop_blablabla.aspx
По существу, страница существует, но не содержит html-тега, который я ищу. Итак, DocumentNodes.SelectedNodes responde null.
Richard MacCutchan
Да, это то, что я только что предложил. Поэтому добавьте правильную проверку ошибок, чтобы не пытаться получить доступ к нулевому объекту.