我正在使用以下查询将 XML 转换为结构。如果某个元素不存在,我将如何在以下查询中适应它(ClntCde 将始终存在,但 Title 有可能不存在)
ClientTbl ClientData = clientNode.Select(x => new ClientTbl
{
ClientCode = x.Elements().Where(e => e.Name.LocalName == "ClntCde").FirstOrDefault().Value,
//Title = x.Elements().Where(e => e.Name.LocalName == "Title").ToString(),
//Title = x.Elements().Where(e => e.Name.LocalName == "Title").FirstOrDefault().Value,
//Title = x.Elements("Title").FirstOrDefault().Value,
}
).First();
XML:
<Client xmlns="http://www.website.co.za/namespace">
<ClntCde>0000013</ClntCde>
<Surname>Account Holder Surname</Surname>
<Address>
<Addr1>.</Addr1>
<Addr2>.</Addr2>
<Addr3>.</Addr3>
<Addr4>.</Addr4>
<PostCde>2000</PostCde>
</Address>
<ClntAccTyp>A</ClntAccTyp>
<ElecInd>NO</ElecInd>
<Lang>ENG</Lang>
</Client>
最佳答案
您可以使用 DefaultIfEmpty("")
:
ClientCode = x.Elements()
.Where(e => e.Name.LocalName == "ClntCde")
.Select(e => e.Value)
.DefaultIfEmpty("")
.First(),
Title = x.Elements()
.Where(e => e.Name.LocalName == "Title")
.Select(e => e.Value)
.DefaultIfEmpty("")
.First(),
// ...
请注意,如果您自己提供默认值,则 ...OrDefault
是多余的。调用 First
或 Single
是安全的(仍然可以在多个元素上抛出),因为它永远不会为空。
关于c# - 元素不存在时返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031598/