Reputation: 7053
I have this db.xml file
<items>
<item>
<title>Title1</title>
<year>2013</title>
<categories>
<category>Category1</category>
<category>Category2</category>
<category>Category3</category>
</categories>
<count>10</count>
</item>
(and so on)
</items>
I read like that:
var items = from item in xdoc.Descendants("item")
select new
{
Title = item.Element("title").Value,
Year = item.Element("year").Value,
Categories = item.Element("categories").Value, // I know this is wrong
Count = item.Element("count").Value
};
The problem is how I can read the categories and add them to list?
foreach (var item in items)
{
book.Title = item.Title;
book.Year = item.Year;
foreach (var Category in Categories)
{
book.Categories.Add(Category);
}
book.Count = item.Count;
books.Add(book);
}
Upvotes: 1
Views: 9721
Reputation: 8937
You can take the list of its elements
EDITED
var items = from item in xdoc.Descendants("item")
select new
{
Title = item.Element("title").Value,
Year = item.Element("year").Value,
Categories = item.Descendants("categories").Descendants().Select(x=>x.Value).ToList(),
Count = item.Element("count").Value
};
Upvotes: 4
Reputation: 236328
It's better to use casting (to string
, to int
, etc then reading element's value directly. Here is query which returns integer values for Year
and Count
properties. Categories
are IEnumerable<string>
:
var items = from item in xdoc.Descendants("item")
select new {
Title = (string)item.Element("title"),
Year = (int)item.Element("year"),
Count = (int)item.Element("count"),
Categories = from c in item.Element("categories").Elements()
select (string)c
};
If you want Categories
as List<string>
then parse categories this way:
Categories = item.Element("categories")
.Elements()
.Select(c => (string)c)
.ToList()
Upvotes: 5