有时XML会丢失某些部分。在这种情况下,XML有时没有“电子邮件”。所以在这种情况下我只想要一个空字符串。这是我到目前为止所尝试的,但我仍然得到了
附加信息:值不能为空。
这是代码和一段XML
XDocument xdoc = XDocument.Parse(result.Result.ToString());
SelectedLead = xdoc.Descendants("Fields").Select(x => new Lead
{
FirstName = x.Descendants("Field").Where(y => y.Attribute("FieldTitle").Value == "First Name").Select(z => z.Attribute("Value").Value).FirstOrDefault(),
LastName = x.Descendants("Field").Where(y => y.Attribute("FieldTitle").Value == "Last Name").Select(z => z.Attribute("Value").Value).FirstOrDefault(),
Email = x.Descendants("Field").Where(y => y.AttributeValueNull("FieldTitle") == "Email").Select(z => z.Attribute("Value").Value).FirstOrDefault()
}).First();
public static string AttributeValueNull(this XElement element, string attributeName)
{
if (element == null)
return "";
else
{
XAttribute attr = element.Attribute(attributeName);
return attr == null ? "" : attr.Value;
}
}
XML:
<Fields>
<Field FieldId="2" Value="John" FieldTitle="First Name" FieldType="Text" />
<Field FieldId="3" Value="Smith" FieldTitle="Last Name" FieldType="Text" />
<Field FieldId="9" Value="123 abc st" FieldTitle="Address" FieldType="Text" />
<Field FieldId="10" Value="Cincinnati" FieldTitle="City" FieldType="Text" />
<Field FieldId="11" Value="OH" FieldTitle="State" FieldType="State" />
</Fields>
答案 0 :(得分:1)
您可以使用已定义的显式转换删除大多数AttributeValueNull
,例如:
return (string)element.Attribute(attributeName);
然后将其合并到辅助方法中以获取字段值可能不那么重复:
private static string FieldValue(XElement fields, string fieldTitle)
{
return fields.Elements("Field")
.Where(e => (string)e.Attribute("FieldTitle") == fieldTitle)
.Select(e => (string)e.Attribute("Value"))
.SingleOrDefault() ?? string.Empty;
}
将这些放在一起:
var lead = doc.Descendants("Fields").Select(fields => new Lead
{
FirstName = FieldValue(fields, "First Name"),
LastName = FieldValue(fields, "Last Name"),
Email = FieldValue(fields, "Email")
}).Single();
您可以在此处查看有效的演示:https://dotnetfiddle.net/TQJsv4
答案 1 :(得分:0)
答案是这个
Email = x.Descendants("Field").Where(y => y.AttributeValueNull("FieldTitle") == "Email")
.Select(z => z.Attribute("Value").Value).FirstOrDefault() ?? string.Empty