基于XML数据创建动态linq-XML

时间:2013-11-27 23:38:01

标签: c# .net xml linq-to-sql xelement

目标:
将XML数据应用于List _a

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

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

enter image description here


C#以下

public class Program
{
private static List<user> _a = new List<user>();
private static user _ab = new user();


static void Main(string[] args)
{
    XDocument xml = XDocument.Load("xml file....");

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

public class user
{
    public String firstname;
    public String lastname;
    public String age;
    public String sex;
}   

下面的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>    

2 个答案:

答案 0 :(得分:0)

使用会话操作员:

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

依旧......

如果元素age不存在,(string)li.Element("age")将返回null并且不会抛出任何异常。

答案 1 :(得分:0)

在获取Value之前测试元素是否为空:

    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);
    }