gpt4 book ai didi

xml - 节点不存在时的 LINQ to XML

转载 作者:行者123 更新时间:2023-12-04 07:06:28 25 4
gpt4 key购买 nike

我正在编写一个通用类来从各种来源读取 RSS 提要,并将其合并到 VB.net 中的一个对象集合中。

基本上,该功能 - 使用 LINQ to XML - 工作正常,但是当我尝试读取的 RSS 提要不包含节点之一(如您所知,其中许多是可选的)时,我遇到了问题。我希望返回的值是一个空字符串或什么都没有,但是我得到了一个运行时错误。
我在网上搜索了同样的问题,我找到了这篇文章 http://forums.asp.net/p/1351226/2762834.aspx#2762834这显然解释了一种解决方法,但它不适用于我的代码。

我也对我发现的关于这个问题的资源很少感到惊讶,所以我现在想知道我是否甚至用正确的术语提出了这个问题......

您可以在下面找到代码:

Dim PostsEnum = From BlogPost In XMLSource.Descendants("item")
Order By DateTime.Parse(BlogPost.Element("pubDate").Value) Descending
Select New Post() With {
.Title = BlogPost.Element("title").Value,
.Link = BlogPost.Element("link").Value,
.Description = BlogPost.Element("description").Value,
.AuthorText = BlogPost.Element("author").Value,
.Category = (From tag In BlogPost.Descendants("category")
Select cat = tag.FirstNode.ToString).ToList,
.PubDate = DateTime.Parse(BlogPost.Element("pubDate").Value),
.GUID = BlogPost.Element("guid").Value
}

我在 http://neatlydoc.codeplex.com/Project/ProjectRss.aspx 上试过这个它有效,但以下代码将生成异常:
Dim PostsEnum = From BlogPost In XMLSource.Descendants("item")
Order By DateTime.Parse(BlogPost.Element("pubDate").Value) Descending
Select New Post() With {
.Title = BlogPost.Element("title").Value,
.Link = BlogPost.Element("link").Value,
.Description = BlogPost.Element("description").Value,
.AuthorText = BlogPost.Element("author").Value,
.Category = (From tag In BlogPost.Descendants("category")
Select cat = tag.FirstNode.ToString).ToList,
.PubDate = DateTime.Parse(BlogPost.Element("pubDate").Value),
.GUID = BlogPost.Element("guid").Value,
.Source = CType(BlogPost.Element("source").Value, String)
}

任何帮助将不胜感激。

谢谢

卢卡

最佳答案

如果您尝试评估 .Value(等) - 那么是的,它会中断 - 但是,您可以尝试强制转换(apols,但我的示例是 C# - 您必须想象 VB):

    select new {
Name = (string)el.Element("abc")
...
}

显式静态转换运算符接受空节点并适本地返回空值。对于更复杂的场景,只需测试一下:
      let child = el.Element("SomeChild")
select new {
Name = child == null ? (string)null : (string)child.Attribute("Name")
...
}

没有示例 xml/code 很难更具体...

编辑您的更新;问题是你还在阅读 .Value ;将其更改为:
.Source = CType(BlogPost.Element("source"), String)

有一个来自 XElement 的转换运算符至 string ;你不需要看 .Value .

关于xml - 节点不存在时的 LINQ to XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com