2012-01-09 1 views
0


Я читаю XML внутри Dataset.Flowing - это моя структура XML.Как получить несколько таблиц в наборе данных из XML

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 

Есть два корневых узлов внутри основного корневого узла (т.е. ClaimHomePage, ClaimBillDetailHC.).
Я хочу написать код, чтобы при создании Dataset из этого XML, в наборе данных должны быть две таблицы (например, ClaimHomePage & ClaimBillDetailHC).
Просьба оказать помощь ...

ответ

1

Использование Relations коллекция. Я думаю, что это прямой способ получить экземпляр таблицы.

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"]); 
} 

Вы должны прочитать XML документа с помощью DOM или Linq для XML API, а затем после того, как вы можете заполнить DataSet/DataTable.

Например (Linq для 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"), 
          }; 

А затем траверс списки и заполнить DataTable/DataSet.

+0

Я делаю то же самое, что вы сделали ... но нет прямого способа получить набор данных ... например .dataset.readxml() и т. Д. –

+0

@AmolKolekar - Посмотрите обновленное сообщение. – adatapost

+0

@ AVD-спасибо за вашу помощь ... я пробовал ваш код, но как первая, так и вторая таблицы имеют все коллекции предметов, я хотел, чтобы у первой таблицы была своя коллекция элементов, а для второго. Как бы то ни было, я решил свою проблему используя linq ... но все же удивляюсь, что мы можем получить коллекцию нескольких таблиц в одном наборе данных через xml. –

Смежные вопросы