2012-01-09 79 views
0


我正在讀取數據集中的XML。以下是我的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。)內的兩個根節點。
我想寫一個代碼,以便當我從這個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"]); 
} 

您必須閱讀使用DOM或LINQ到XML API XML文檔,然後後可能填充的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"), 
          }; 

然後遍歷列表並填充數據表/數據集。

+0

我正在做同樣的事情,你做了...但沒有直接的方式來獲取數據集...像.dataset.readxml()等。 – 2012-01-09 05:11:48

+0

@AmolKolekar - 看看更新後的帖子。 – adatapost 2012-01-09 12:53:50

+0

@ AVD-感謝您的幫助...我試了你的代碼,但第一個和第二個表都有所有項目集合,我想要第一個表應該有它自己的項目集合,所以對於第二個問題但是我已經解決了我的問題使用LINQ ...但仍然懷疑我們可以通過xml在一個數據集中獲取多個表集合。 – 2012-01-10 03:32:06