I have a class (Person) and a XML tree:
<rows>
<row>
<number>1110</number>
<name>Street</name>
<value>First Avenue</value>
<description>First Avenue</description>
</row>
<row>
<number>1120</number>
<name>House number</name>
<value>281</value>
<description>281</description>
</row>
<row>
<number>1160</number>
<name>Postal</name>
<value>2552AD</value>
<description>2552AD</description>
</row>
<row>
<number>1170</number>
<name>Area</name>
<value>Peru</value>
<description>Peru</description>
</row>
</rows>
The person class has attributes like street, house number, postal, and area. How do I fill this person object?
The problem in my query is that I dont know where to add:
where (string)c.Element("name") == "Street"
My code thus so far:
public class XMLparser
{
public Person XMLparse(string path)
{
Person person = new Person();
List<Person> ListPerson = new List<Person>();
XDocument file = XDocument.Load(path);
var query = from c in file.Descendants("row")
select new
{
c.Element("value").Value
};
// Loop through results
foreach (var value in query)
{
person._street = value.Value;
person._housenumber = value.Value;
person._postal = value.Value;
person._area = value.Value;
}
return person;
}
}
What I want is to take from the xml and fill it in
person._street = value.Value; //<-- First Avenue
person._housenumber = value.Value; //<-- 281
person._postal = value.Value; //<-- 2552AD
person._area = value.Value; //<-- Peru
EDIT:
Here is the original XMl tree.
<?xml version="1.0" encoding="utf-8" ?>
<results>
<person>
<categories>
<category>
<number>01</number>
<name>Person</name>
<rows>
<row>
<number>0110</number>
<name>ID</name>
<value>value ID</value>
<description>value ID</description>
</row>
</rows>
</category>
<category>
<number>08</number>
<name>Address</name>
<rows>
<row>
<number>1110</number>
<name>Street</name>
<value>value street</value>
<description>value street</description>
</row>
<row>
<number>1120</number>
<name>House number</name>
<value>value House number</value>
<description>value House number</description>
</row>
<row>
<number>1160</number>
<name>Postal</name>
<value>value Postal</value>
<description>value Postal</description>
</row>
<row>
<number>1170</number>
<name>Area</name>
<value>value Area</value>
<description>value Area</description>
</row>
</rows>
</category>
</categories>
</person>
<person>
<categories>
<category>
<number>01</number>
<name>Person</name>
<rows>
<row>
<number>0110</number>
<name>ID</name>
<value>value ID</value>
<description>value ID</description>
</row>
</rows>
</category>
<category>
<number>08</number>
<name>Address</name>
<rows>
<row>
<number>1110</number>
<name>Street</name>
<value>value Street</value>
<description>value Street</description>
</row>
<row>
<number>1120</number>
<name>House number</name>
<value>value House number</value>
<description>value House number</description>
</row>
<row>
<number>1130</number>
<name>House number extra</name>
<value>value House number extra</value>
<description>value House number extra</description>
</row>
<row>
<number>1160</number>
<name>Postal</name>
<value>value Postal</value>
<description>value Postal</description>
</row>
<row>
<number>1170</number>
<name>Area</name>
<value>value Area</value>
<description>value Area</description>
</row>
</rows>
</category>
</categories>
</person>
</results>
You can use this code:
It assumes that the XML can contain multiple
rowstags, one for each person. It then gets the name and value of eachrowtag inside therowstags and initializes a person with the values.