Reputation: 2325
I am reading XML inside the Dataset.Following is my XML structure.
XML:-
<?xml version="1.0" encoding="utf-8" ?>
<root>
<ClaimHomePage>
<item>
<controlID>txtHospitalName</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtHospitalAddress</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtAuthorizeAmount</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtDtTmOfAdmission</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
</ClaimHomePage>
<ClaimBillDetailHC>
<item>
<controlID>txtHospitalName</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtHospitalAddress</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtAuthorizeAmount</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
<item>
<controlID>txtDtTmOfAdmission</controlID>
<rolesEnabled>Non Medico,Medico,Auditor,CMO</rolesEnabled>
<rolesVisible>Non Medico,Medico,Auditor,CMO</rolesVisible>
</item>
</ClaimBillDetailHC>
</root>
enter code here
There are two root nodes inside the main root node(i.e. ClaimHomePage,ClaimBillDetailHC).
I want to write a code so that when i create Dataset from this XML,there should be two tables (i.e ClaimHomePage & ClaimBillDetailHC) present in the Dataset.
Please provide some help...
Upvotes: 0
Views: 3829
Reputation: 94653
Use Relations
collection. I think this is the direct way to get table instance.
DataSet ds = new DataSet();
ds.ReadXml(file);
if (ds.Relations.Count == 2)
{
DataTable first = ds.Relations[0].ChildTable;
DataTable second = ds.Relations[0].ChildTable;
Console.WriteLine("Table : " + ds.Relations[0].ParentTable.TableName);
foreach (DataRow row in first.Rows)
Console.WriteLine(row["controlID"] + " " + row["rolesEnabled"] + " " + row["rolesVisible"]);
}
You have to read XML
document using DOM or Linq to XML API and then after you may populate DataSet/DataTable.
For instance (Linq to XML)
XDocument doc = XDocument.Load(file);
//List from ClaimHomePage
var ClaimHomePage = from ele in doc.Root.Element("ClaimHomePage").Descendants("item")
select new
{
ControlID=(string)ele.Element("controlID"),
rolesEnabled = (string)ele.Element("rolesEnabled"),
rolesVisible = (string)ele.Element("rolesVisible"),
};
var ClaimBillDetailHC= from ele in doc.Root.Element("ClaimBillDetailHC").Descendants("item")
select new
{
ControlID=(string)ele.Element("controlID"),
rolesEnabled = (string)ele.Element("rolesEnabled"),
rolesVisible = (string)ele.Element("rolesVisible"),
};
And then traverse the lists and populate DataTable/DataSet.
Upvotes: 2