Member 10558090 Ответов: 0

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

Да, это то, что я только что предложил. Поэтому добавьте правильную проверку ошибок, чтобы не пытаться получить доступ к нулевому объекту.

0 Ответов