I need some help with converting XML with child nodes to csv file.
Here's my XML:
<Main>
<root>
<Name>Sample name1</Name>
<StreetAddress>Sample Address1</StreetAddress>
<Service>
<Type>Outlet</Type>
<PhoneNumber></PhoneNumber>
<Openweekday>Closed</Openweekday>
</Service>
<Service>
<Type>Mall</Type>
<PhoneNumber></PhoneNumber>
<Openweekday>Closed</Openweekday>
</Service>
</root>
<root>
<Name>Sample name2</Name>
<StreetAddress>Sample Address2</StreetAddress>
<Service>
<Type>Shop</Type>
<PhoneNumber></PhoneNumber>
<Openweekday>Closed</Openweekday>
</Service>
</Main>
Expected CSV Result:
Name,StreetAddress,Type,PhoneNumber,OpenweekDay,Type,PhoneNumber,OpenweekDay
Sample name1,Sample Address1,Outlet,,Closed,Mall,,Closed
Sample name2,Sample Address2,Shop,,Closed
Tried this code I got from MSDN. But it throws a null exception -
XElement custOrd = XElement.Load("xxx.xml");
string csv =
(from el in custOrd.Element("Main").Elements("root")
select
String.Format("{0},{1},{2},{3},{4},{5},{6},{7}",
(string)el.Attribute("Name"),
(string)el.Element("StreetAddress"),
(string)el.Element("Service").Element("Type"),
(string)el.Element("Service").Element("PhoneNumber"),
(string)el.Element("Service").Element("Openweekday"),
(string)el.Element("Service").Element("Type"),
(string)el.Element("Service").Element("PhoneNumber"),
(string)el.Element("Service").Element("Openweekday"),
Environment.NewLine
)
)
.Aggregate(
new StringBuilder(),
(sb, s) => sb.Append(s),
sb => sb.ToString()
);
Console.WriteLine(csv);
let me know how to manage nulls within linq.