Question

Goal:
To apply the XML data to the List _a

Problem:
When making transaction of Jessica black I retrieve the error message "{"Object reference not set to an instance of an object."}" at the source code "_ab.age = li.Element("age").Value;" because there is no data of Jessicas age in the xml. Same problem can be for Jim West's sex.

What should I do? I started getting crazy!

enter image description here


C # below

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 code below

<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>    
Was it helpful?

Solution

Use conversation operator:

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

and so on...

If element age doesn't exist, (string)li.Element("age") will return null and won't throw any exception.

OTHER TIPS

Just test if the element is not null before getting it's 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);
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top