Please review below code and advice what needs to be done in order to get the additional last line in output as shown in expected output
class test {
static void Main(string[] args)
{
XDocument doc = XDocument.Load("E:\\BI_analytics\\Data\\so.xml");
var query = from test in doc.Descendants("tester")
from testreq in test.Descendants("testRequest")
from testresp in test.Descendants("testResponse")
let id = testreq.Element("id") == null ? string.Empty : testreq.Element("id").Value
// select id;
from itm in testresp.Descendants("item")
select new
{
ID = (string)id,
Name = (string)itm.Attribute("itemname"),
Code = (string)itm.Attribute("itemocde"),
};
foreach (var result in query)
{
Console.WriteLine(result);
}
}
}
Current output
{ ID = 2, Name = test item1, Code = 111 }
{ ID = 2, Name = test item2, Code = 222 }
{ ID = 3, Name = test item3, Code = 333 }
{ ID = 3, Name = test item4, Code = 444 }
Expected output
{ ID = 2, Name = test item1, Code = 111 }
{ ID = 2, Name = test item2, Code = 222 }
{ ID = 3, Name = test item3, Code = 333 }
{ ID = 3, Name = test item4, Code = 444 }
{ ID = 4, Name = , Code = }
<?xml version="1.0" encoding="utf-8"?>
<root>
<tester>
<testRequest>
<id>2</id>
</testRequest>
<testResponse>
<items>
<item itemname="test item1" itemocde="111"/>
<item itemname="test item2" itemocde="222"/>
</items>
</testResponse>
</tester>
<tester>
<testRequest>
<id>3</id>
</testRequest>
<testResponse>
<items>
<item itemname="test item3" itemocde="333"/>
<item itemname="test item4" itemocde="444"/>
</items>
</testResponse>
</tester>
<tester>
<testRequest>
<id>4</id>
</testRequest>
<testResponse>
<items />
</testResponse>
</tester>
</root>
This is the problem:
You don’t have any
itemelements, so you probably want:… at which point you need: