C# 基于XML数据创建动态linqxml

C# 基于XML数据创建动态linqxml,c#,.net,xml,linq-to-sql,xelement,C#,.net,Xml,Linq To Sql,Xelement,目标: 要将XML数据应用于列表_a 问题: 在对Jessica black进行事务处理时,我检索到错误消息“{”对象引用未设置为 源代码“_ab.age=li.Element(“age”).Value;”“中的对象实例“}”,因为没有 杰西卡年龄的数据在xml中。吉姆·韦斯特的性别也有同样的问题 我该怎么办?我开始发疯了 C#以下 公共类程序 { 私有静态列表_a=新列表(); 私有静态用户_ab=新用户(); 静态void Main(字符串[]参数) { XDocument xml=XD

目标:
要将XML数据应用于列表_a

问题:
在对Jessica black进行事务处理时,我检索到错误消息“{”对象引用未设置为 源代码
“_ab.age=li.Element(“age”).Value;”“
中的对象实例“}”,因为没有 杰西卡年龄的数据在xml中。吉姆·韦斯特的性别也有同样的问题

我该怎么办?我开始发疯了


C#以下

公共类程序
{
私有静态列表_a=新列表();
私有静态用户_ab=新用户();
静态void Main(字符串[]参数)
{
XDocument xml=XDocument.Load(“xml文件…”);
xml.Root.substands(“user”).ToList().ForEach(li=>
{
_ab=新用户();
_ab.firstname=li.Element(“firstname”).Value;
_ab.lastname=li.Element(“lastname”).Value;
_ab.年龄=锂元素(“年龄”)值;
_ab.sex=li.Element(“sex”).值;
_a、 添加(_ab);
}
}
}
公共类用户
{
公共字符串名;
公共字符串lastname;
公共字符串年龄;
公共性;
}   

下面是XML代码

<users>
    <user>
        <firstname>sara</firstname>
        <lastname>brown</lastname>
        <age>20</age>
        <sex>female</sex>
    </user>
    <user>
        <firstname>Jessica</firstname>
        <lastname>black</lastname>
        <sex>Female</sex>
    </user>
    <user>
        <firstname>Jim</firstname>
        <lastname>west</lastname>
        <age>26</age>
    </user>
    <user>
        <firstname>robert</firstname>
        <lastname>lake</lastname>
        <age>41</age>
        <sex>male</sex>
    </user>
    <user>
        <firstname>Britany</firstname>
        <lastname>McLove</lastname>
        <age>21</age>
    </user>
</users>    

萨拉
棕色的
20
女性的
杰西卡
黑色
女性
吉姆
西
26
罗伯特
湖
41
男性的
布里塔尼
麦克洛夫
21

使用对话操作符:

_ab.age = (string)li.Element("age");
等等


如果元素
age
不存在,
(字符串)li.element(“age”)
将返回
null
,并且不会引发任何异常。

只需在获取元素的
值之前测试该元素是否为null即可:

    xml.Root.Descendants("user").ToList().ForEach(li =>
    {
        _ab = new user();
        if (li.Element("firstname") != null) _ab.firstname = li.Element("firstname").Value;
        if (li.Element("lastname") != null) _ab.lastname = li.Element("lastname").Value;
        if (li.Element("age") != null) _ab.age = li.Element("age").Value;
        if (li.Element("sex") != null) _ab.sex = li.Element("sex").Value;
        _a.Add(_ab);
    }
    xml.Root.Descendants("user").ToList().ForEach(li =>
    {
        _ab = new user();
        if (li.Element("firstname") != null) _ab.firstname = li.Element("firstname").Value;
        if (li.Element("lastname") != null) _ab.lastname = li.Element("lastname").Value;
        if (li.Element("age") != null) _ab.age = li.Element("age").Value;
        if (li.Element("sex") != null) _ab.sex = li.Element("sex").Value;
        _a.Add(_ab);
    }