Не работает конструкция if!

196
30 мая 2018, 15:30

Пишу новостной парсер. Был старый метод получения данных из RSS,попроще, он работал. Вот он:

    public bool getNewArticles(string fileSource)
    {
        SampleContext pContext = new SampleContext();
        GetKeyWords kWordsGetter = new GetKeyWords();
        string head;
        string syn;
        string link;
        string date;
        string keyW;
        string chanelName;
        string[] sources =
        {
        "http://www.interfax.ru/rss.asp",
        "http://www.mk.ru/rss/politics/index.xml"
        };
         try
         {
             XmlDocument doc = new XmlDocument();
             doc.Load(fileSource);
             XmlNodeList nodeList;
             XmlNode root = doc.DocumentElement;
             nodeList = root.ChildNodes;
             int count = 0;
             foreach (XmlNode chanel in nodeList)
             {
                 foreach (XmlNode chanel_item in chanel)
                 {
                     if (chanel_item.Name == "item")
                     {
                         XmlNodeList itemsList = chanel_item.ChildNodes;
                         foreach (XmlNode item in itemsList)
                         {
                             if (item.Name == "title")
                             {
                                 head = item.InnerText;
                                Console.WriteLine(head);
                             }
                             if (item.Name == "link")
                             {
                                 link = item.InnerText;
                                Console.WriteLine(link);
                             }
                             if (item.Name == "description")
                             {
                                 syn = item.InnerText;
                             }
                             context.News.Add(new DB.Table()
                             {
                                 Id = count,
                                 Head = head,
                                 Link = link,
                                 Synopsis = syn
                             });
                             context.SaveChanges();
                         }
                         count += 1;
                     }

                 }
             }
             return true;
         }
         catch (Exception ex)
         {
             return false;
         }    
    }
}

Усовершенствовал метод, чтобы выделял из документа только политические новости посредством сравнения с категорией (item.Name = "category"), но код работать перестал, доходит только до title в документе, т.е. в консоль выдаёт head, а остальные if игнорирует. Вот усовершенствованный метод:

public bool getNewArticles(string fileSource)
    {
        SampleContext pContext = new SampleContext();
        GetKeyWords kWordsGetter = new GetKeyWords();
        string head;
        string syn;
        string link;
        string date;
        string keyW;
        string chanelName;
        string[] sources =
        {
        "http://www.interfax.ru/rss.asp",
        "http://www.mk.ru/rss/politics/index.xml"
        };
try
        {
            XmlDocument doc = new XmlDocument();
            XmlNodeList nodeList;
            XmlNode root;
            //string fileSource = "http://www.interfax.ru/rss.asp";
            //foreach (string fileSource in sources)
            {
                doc.Load(fileSource);
                root = doc.DocumentElement;
                nodeList = root.ChildNodes;
                foreach (XmlNode chanel in nodeList)
                {
                    foreach (XmlNode chanel_item in chanel)
                    {
                        if (chanel_item.Name == "title")
                        {
                            chanelName = chanel_item.InnerText;
                        }
                        if (chanel_item.Name == "item")
                        {
                            XmlNodeList itemsList = chanel_item.ChildNodes;
                            Console.WriteLine(5);
                            foreach (XmlNode item in itemsList)
                            {
                                Console.WriteLine(6);
                                if (item.Name == "title")
                                {
                                    head = item.InnerText;
                                    keyW = kWordsGetter.ToKWStr(head);
                                    Console.WriteLine(head);
                                }
                                if (item.Name == "link")
                                {
                                    link = item.InnerText;
                                    Console.WriteLine(link);
                                }
                                if (item.Name == "description")
                                {
                                    Console.WriteLine(9);
                                    syn = item.InnerText;
                                }
                                if (item.Name == "pubDate")
                                {
                                    Console.WriteLine(10);
                                    date = item.InnerText;
                                }
                                if (item.Name == "category" & (item.InnerText == "В мире" 
         || item.InnerText == "В России" || item.InnerText == "Политика"))
                                {
                                    Console.WriteLine(7);
                                }
                                else
                                    break;
                                pContext.pArticles.Add(new DB.PoliticsArticles()
                                {
                                    header = head,
                                    link = link,
                                    synopsis = syn,
                                    keyWords = keyW,
                                    dateTime = Convert.ToDateTime(date),
                                    source = chanelName
                                });
                                pContext.SaveChanges();
                            }

                        }

                    }
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
}

Выдача такая:

Answer 1

if работает. Проблема с циклом.
Если это не политическая новость - Вы просто выходите из цикла, обрабатывающего внутренние ноды item'а.
Замените break на continue. Это не даст выполнится коду добавления в базу, но не прекратит обработку списка.

Оператор break завершает выполнение ближайшего оператора внешнего цикла или switch, в котором он находится. Управление передается оператору, который расположен после завершенного оператора.

Оператор continue передает управление следующей итерации вложенного оператора while, do, for или foreach, в котором она встречается.

Ну и операнд "и" в C# пишется как &&, а не как &.

P.S. И вынесите добавление в базу из foreach. Перед добавлением нужно заполнить все свойства.

READ ALSO
Задание угловой скорости в box2dx

Задание угловой скорости в box2dx

Не знаю корректно ли задавать тут вопрос по конкретной библиотеке, но сильно не понимаю, поэтому пишуМожет кто сталкивался

209
Не работает макрос под SolidWorks на C#

Не работает макрос под SolidWorks на C#

Пытаюсь написать макрос на шарпе под SolidWorksНиже -- неработающий участок кода

297
C#: фильтрация ip-адресов

C#: фильтрация ip-адресов

В программе нужно получить свой ip адресДелаю это такой функцией:

193