I have written the following code. But I am not able to understand how to not to print the empty node if the List() Value is null. How do I go about it?
private TokenValues TokenValues(string emailData)
{
if (!string.IsNullOrWhiteSpace(emailData))
{
XDocument xmldoc = XDocument.Parse(chkData);
var nodes = xmldoc.Descendants().Elements();
if (nodes == null || nodes.Count() == 0) return new TokenValues();
TokenValues tokenvalues = new TokenValues { Tokens = new List<Model2.Token>() };
foreach (XElement node in nodes)
{
Model2.Token token = new Model2.Token { Name = node.Name.ToString(),
Value = node.Value,
Tokens = new List<Model2.Token>()
};
var descendants = node.Descendants();
if (descendants != null && descendants.Count() > 0)
{
foreach (XElement dnode in descendants)
token.Tokens.Add(new Model2.Token { Name = dnode.Name.ToString()
, Value = dnode.Value
, Tokens = new List<Model2.Token>()
}
);
}
tokenvalues.Tokens.Add(token);
}
return tokenvalues;
My output file looks something like this:
<Tokens>
<Token>
<Name>first_name</Name>
<Tokens/>
<Value>Antoinette</Value>
</Token>
<Token>
<Name>last_name</Name>
<Tokens/>
<Value>MCGRATH</Value>
</Token>
<Token>
<name>Employee_Details</name>
<Tokens>
<Token>
<name>Address</name>
<Tokens/>
<value>123 xyz</value>
</Token>
<Token>
<name>City</name>
<Tokens/>
<value>Las Vegas</value>
</Token>
</Tokens>
<Value>
123 xyz Las Vegas
</Value>
</Token>
</Token>
I do not want the to print if it is null.
How about preprocessing the XML document to remove empty nodes before executing further logic :
XDocument xmldoc = XDocument.Parse(chkData);
var emptyNodes = xmldoc.Descendants().Where(o => o.IsEmpty).ToList();
foreach (XElement n in emptyNodes)
{
n.Remove();
}
//here you can continue with your logic to generate TokenValues
.....
.....