通过 Linq 获取 XML 值时设置默认值
我正在使用 Linq 从某些 XML 中提取值。下面显示的是一个简化的示例,显示了我遇到的问题。以下代码在如下所示的 XML 上运行良好。我遇到的问题是 groupBy
部分丢失。因为当缺少 Data.Element("groupBy").Element("property)
时,会失败,因为 Data.Element("groupBy")
将为 null。是否可以修改我的 Linq 语句以允许它提供默认值还是应该以不同的方式处理它?
var e = (from Data in theXML.Descendants("exportFile")
select new Export
{
OutputFileName = Data.Element("outputFileName") != null ? (string)Data.Element("outputFileName") : "",
GroupByProperty = Data.Element("groupBy").Element("property") != null ? (string)Data.Element("groupBy").Element("property") : ""
}).First();
<exportFile>
<outputFileName>output.xml</outputFileName>
<groupBy>
<property>DeviceId</property>
</groupBy>
</exportFile>
I’m using Linq to extract values from some XML. Shown below is a simplified example to show the problem I’m having. The following code works fine on the XML shown below. The problem I have is when the groupBy
section is missing. Because when it’s missing Data.Element("groupBy").Element("property)
fails because Data.Element("groupBy")
will be null. Is it possible to modify my Linq statement to allow it to provide a default or should it be approached in a different way?
var e = (from Data in theXML.Descendants("exportFile")
select new Export
{
OutputFileName = Data.Element("outputFileName") != null ? (string)Data.Element("outputFileName") : "",
GroupByProperty = Data.Element("groupBy").Element("property") != null ? (string)Data.Element("groupBy").Element("property") : ""
}).First();
<exportFile>
<outputFileName>output.xml</outputFileName>
<groupBy>
<property>DeviceId</property>
</groupBy>
</exportFile>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您已经可以使其比使用空合并运算符稍微好一些。但是,处理缺少的
groupby
元素会更困难:如果元素引用为 null,则转换为字符串只会返回 null。
另一种选择是:
使用扩展方法,该方法允许您在
IEnumerable
上调用Elements
...,以便(懒惰地)评估每个的序列Data
下的groupBy
元素下的property
元素,然后获取其中的第一个(如果存在),然后应用字符串转换。You can already make it slightly nicer than it is using the null coalescing operator. However, to cope with the
groupby
element being missing is harder:The conversion to string just returns null if the element reference is null.
An alternative would be:
That uses the extension method which allows you to call
Elements
on anIEnumerable<XElement>
... so that will (lazily) evaluate a sequence of everyproperty
element under agroupBy
element underData
, then take the first of them if any exist, then apply the string conversion.您可以简单地在语句中添加额外的检查(并使用空合并运算符清理一些内容):
You could simply add an additional check in the statement (and clean things up a bit using the null coalescing operator):