不存在摘要节点时出现 LINQ to XML 异常

发布于 2025-01-04 12:54:22 字数 1554 浏览 0 评论 0原文

我一直在使用 LINQ to XML,但遇到了一个问题。我真的很感激任何帮助。我是 LINQ to XML 的新手,但我发现它很容易使用。

我有两个不同的联合提要,我使用 Union 将它们聚合为一个联合提要。最终的聚合 feed 包含 10 个项目。

我正在尝试使用 XDocument 和 XElement 将联合提要写入 XML 文件。我在很大程度上能够成功地做到这一点。但是,提要中的某些项目没有作为节点元素的描述。当我到达没有此节点元素的项目时,我收到异常,因为我没有其中一项的描述节点。在开始编写 XML 文件之前,如何检查项目以查看是否存在名为“description”的节点?如果该项目不包含描述节点,我如何使用默认值填充它?您能给我建议任何解决方案吗?感谢您抽出宝贵的时间!

SyndicationFeed combinedfeed = new SyndicationFeed(newFeed1.Items.Union(newFeed2.Items).OrderByDescending(u => u.PublishDate));

//save the filtered xml file to a folder
XDocument filteredxmlfile = new XDocument(
             new XDeclaration("2.0", "utf-8", "yes"),
             new XElement("channel",
             from filteredlist in combinedfeed.Items
             select new XElement("item",
                  new XElement("title", filteredlist.Title.Text),
                  new XElement("source", FormatContent(filteredlist.Links[0].Uri.ToString())[0]),
                  new XElement("url", FormatContent(filteredlist.Links[0].Uri.ToString())[1]),
                  new XElement("pubdate", filteredlist.PublishDate.ToString("r")),
                  new XElement("date",filteredlist.PublishDate.Date.ToShortDateString()),
// I get an exception here as the summary/ description node is not present for all the items in the syndication feed
new XElement("date",filteredlist.Summary.Text)
                  )));
string savexmlpath = Server.MapPath(ConfigurationManager.AppSettings["FilteredFolder"]) + "sorted.xml";
filteredxmlfile.Save(savexmlpath);

I have been working with LINQ to XML and have been stuck with an issue. I would really appreciate any help. I am new to LINQ to XML, but I found it easy to work with.

I have two different syndication feeds that I aggregate to one single syndication feed using Union. The final syndication feed contains 10 items.

I am trying to write the syndication feed to an XML file using XDocument and XElement. I have been able to do that successfully for the most part. But, some of the items in the feed do not have a description as a node element. When I get to the items that do not have this node element I am getting an Exception as I don’t have a description node for one of the items. How can I check the items to see if there is a node called description before I start writing the XML file? If the item does not contain the description node how could I populate it with a default value? Could you please suggest me any solution? Thank you for all your time!

SyndicationFeed combinedfeed = new SyndicationFeed(newFeed1.Items.Union(newFeed2.Items).OrderByDescending(u => u.PublishDate));

//save the filtered xml file to a folder
XDocument filteredxmlfile = new XDocument(
             new XDeclaration("2.0", "utf-8", "yes"),
             new XElement("channel",
             from filteredlist in combinedfeed.Items
             select new XElement("item",
                  new XElement("title", filteredlist.Title.Text),
                  new XElement("source", FormatContent(filteredlist.Links[0].Uri.ToString())[0]),
                  new XElement("url", FormatContent(filteredlist.Links[0].Uri.ToString())[1]),
                  new XElement("pubdate", filteredlist.PublishDate.ToString("r")),
                  new XElement("date",filteredlist.PublishDate.Date.ToShortDateString()),
// I get an exception here as the summary/ description node is not present for all the items in the syndication feed
new XElement("date",filteredlist.Summary.Text)
                  )));
string savexmlpath = Server.MapPath(ConfigurationManager.AppSettings["FilteredFolder"]) + "sorted.xml";
filteredxmlfile.Save(savexmlpath);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

π浅易 2025-01-11 12:54:22

只需检查 null

new XElement("date",filteredlist.Summary !=null ? filteredlist.Summary.Text : "default summary")

Just check for null:

new XElement("date",filteredlist.Summary !=null ? filteredlist.Summary.Text : "default summary")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文