@Deka007

Как прочитать значение тэгов xml файла?

Пытаюсь прочитать xml файл, во вложениях тэга entry, значение тэгов link, updated, title, НО не получается, выходит ошибка "System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта." n было null."

XmlReader xmlreader = XmlReader.Create(@"D:\RssFeed\www.redditc.xml");
                 
                     while (xmlreader.Read())
                     {

                        if (xmlreader.NodeType == XmlNodeType.Element)
                        {
                            string[] xmlNode = {"entry"};
                            string[] selectNode = {"link", "updated", "title" };
                            XmlDocument xmlDoc = new XmlDocument();
                            foreach (var node in xmlNode)
                            {
                                if (xmlreader.Name == node)
                                {      
                                    xmlDoc.LoadXml(xmlreader.ReadOuterXml());
                                    XmlNode n = xmlDoc.SelectSingleNode(node);

                                        foreach (string item in selectNode)
                                        {
                                            string selNode = n.SelectSingleNode(item).InnerText;
                                            Console.WriteLine(selNode);
                                        }

                                }
                                
                            }
                        }
                 }

Вот сам файл xml
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <category term="worldnews" label="r/worldnews" />
  <updated>2019-08-07T09:34:39+00:00</updated>
  <icon>https://www.redditstatic.com/icon.png/</icon>
  <id>/r/worldnews/.rss</id>
  <link rel="self" href="https://www.reddit.com/r/worldnews/.rss" type="application/atom+xml" />
  <link rel="alternate" href="https://www.reddit.com/r/worldnews/" type="text/html" />
  <subtitle>A place for major news from around the world, excluding US-internal news.</subtitle>
  <title>World News</title>
  <entry>
    <author>
      <name>/u/vannybros</name>
      <uri>https://www.reddit.com/user/vannybros</uri>
    </author>
    <category term="worldnews" label="r/worldnews" />
    <content type="html">&amp;#32; submitted by &amp;#32; &lt;a href="https://www.reddit.com/user/vannybros"&gt; /u/vannybros &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href="https://www.taiwannews.com.tw/en/news/3759806"&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href="https://www.reddit.com/r/worldnews/comments/cmxnwn/hong_kong_police_tear_skirt_underwear_off_female/"&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content>
    <id>t3_cmxnwn</id>
    <link href="https://www.reddit.com/r/worldnews/comments/cmxnwn/hong_kong_police_tear_skirt_underwear_off_female/" />
    <updated>2019-08-06T23:06:01+00:00</updated>
    <title>Hong Kong police tear skirt, underwear off female protester, sparking public wrath</title>
  </entry>
  <entry>
    <author>
      <name>/u/Frocharocha</name>
      <uri>https://www.reddit.com/user/Frocharocha</uri>
    </author>
    <category term="worldnews" label="r/worldnews" />
    <content type="html">&amp;#32; submitted by &amp;#32; &lt;a href="https://www.reddit.com/user/Frocharocha"&gt; /u/Frocharocha &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href="https://www.usatoday.com/story/travel/news/2019/08/06/mass-shootings-force-foreign-countries-issue-us-travel-warnings/1930215001/"&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href="https://www.reddit.com/r/worldnews/comments/cmvpdx/venezuela_uruguay_japan_warn_citizens_about/"&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content>
    <id>t3_cmvpdx</id>
    <link href="https://www.reddit.com/r/worldnews/comments/cmvpdx/venezuela_uruguay_japan_warn_citizens_about/" />
    <updated>2019-08-06T20:23:43+00:00</updated>
    <title>Venezuela, Uruguay, Japan warn citizens about traveling to the US because of mass shootings</title>
  </entry>
  <entry>
    <author>
      <name>/u/PreMedSomewhere</name>
      <uri>https://www.reddit.com/user/PreMedSomewhere</uri>
    </author>
    <category term="worldnews" label="r/worldnews" />
    <content type="html">&amp;#32; submitted by &amp;#32; &lt;a href="https://www.reddit.com/user/PreMedSomewhere"&gt; /u/PreMedSomewhere &lt;/a&gt; &lt;br/&gt; &lt;span&gt;&lt;a href="https://www.cnn.com/2019/08/06/business/dominos-stockpiling-ingredients-gbr-intl-scli/index.html"&gt;[link]&lt;/a&gt;&lt;/span&gt; &amp;#32; &lt;span&gt;&lt;a href="https://www.reddit.com/r/worldnews/comments/cmt9c1/dominos_is_stockpiling_pizza_ingredients_to/"&gt;[comments]&lt;/a&gt;&lt;/span&gt;</content>
    <id>t3_cmt9c1</id>
    <link href="https://www.reddit.com/r/worldnews/comments/cmt9c1/dominos_is_stockpiling_pizza_ingredients_to/" />
    <updated>2019-08-06T17:04:26+00:00</updated>
    <title>Domino's is stockpiling pizza ingredients to protect against a disorderly Brexit</title>
  </entry>
</feed>
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AlexanderMi
Software Developer
Есть такая штука, называется XPath.
Примерно так, писал не в СР.

array = xmlDoc.selectNodes("//feed/entry");
for i = 0; i < array.length; i++ {
   node = array[i]
   string link = node.selectSingleNode('link').Text;
   string updated = node.selectSingleNode('updated').Text;
   string text = node.selectSingleNode('text').Text;
}


А вообще у C# есть мощные сериализации в классы.
Ответ написан
@Klass
web developer
Вам обязательно это все в C# делать?
Есть прекрасный способ: использовать xslt-шаблоны.
Описывается какие данные и в какой формате вам нужны в шаблоне. И уже в .net применяете этот шаблон к вашей xml.
https://docs.microsoft.com/ru-ru/dotnet/standard/d...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы