2017-02-16 34 views
0

我已經爲用戶設置添加了一個爲config.xml文件添加的應用程序。C# - 從XML創建的數據集中讀取數據的乾淨方式

我通過簡單地閱讀它:

DataSet config = new DataSet(); 
config.ReadXml(configPath); 

參數config.xml中在一些表下分組列:

<?xml version="1.0" standalone="yes"?> 
<UserSetup> 
    <TableA> 
    <revBegin>value1</revBegin> 
    <revEnd>value2</revEnd> 
    ... 
    </TableA> 
    ... 
</UserSetup> 

我正在尋找的是讀一個乾淨的方式從DataSet配置中,不需要記憶表或列的名稱。

在我目前的執行我實現了由下面的類:

public static class MyTables 
{ 
    public static class TableA 
    { 
     public const String name = "TableA"; 
     public const String revBegin = "revBegin"; 
     public const String revEnd = "revEnd"; 
     ... 
    } 
    ... 
} 

和我讀到這樣的價值觀:

String revEnd = config.Tables[MyTables.TableA.name].Rows[0][MyTables.TableA.revEnd].ToString(); 

但我不知怎麼填,這是相當複雜的解決很簡單的問題 - 不要說討厭的方式。

你有什麼想法,我怎麼能讓事情變得更簡單或更清潔?

P.S.在某些時候,我嘗試將config.Tables[MyTables.TableA.name]部分減少到config.Tables[MyTables.TableA],但是 - 我怎麼看它 - 它需要將Index[object]添加到密封類DataTableCollection並在我的靜態類中覆蓋ToString()方法 - 兩者都不可能。我對嗎?

+0

我通常創建一個示例DataSet,然後使用config.WriteXml(「filename」,XmlWriteMode.WriteSchema)保存;標準DataSet的根標籤爲DataSet名稱,下一級標籤爲表名,第三級標籤爲列名後跟行數據。 – jdweng

回答

1

除非您絕對必須使用DataSet來讀取XML,否則您可以使用XML序列化實現相同的結果。用下面的註釋來說明你的課程。

 [XmlRoot] 
     [Serializable] 
     public class UserSetUp 
     { 
      [XmlElement] 
      public TableA TableA { get; set; } 
     } 

     [Serializable] 
     public class TableA 
     { 
      [XmlElement] 
      public string revBegin { get; set; } 

      [XmlElement] 
      public string revEnd { get; set; } 
     } 

假設你的配置在C:\這個例子中。

var configStream = File.OpenRead(@"C:\Config.xml"); 
    var reader = new StreamReader(configStream); 
    var xmlString = reader.ReadToEnd(); 
    var serializer = new XmlSerializer(typeof(UserSetUp)); 
    var stringReader = new StringReader(xmlString); 

    var userSetup = (UserSetUp)serializer.Deserialize(stringReader); 

我用下面的XML測試過它,它工作正常。

<?xml version="1.0" encoding="utf-16" ?> 
<UserSetUp> 
    <TableA> 
    <revBegin>1</revBegin> 
    <revEnd>2</revEnd> 
    </TableA> 
</UserSetUp> 

希望能幫助你。

+0

我不得不專注於別的事情,而且我沒有時間更早地檢查您的解決方案,但這正是我所需要的。事實上,還有一種想法需要用這種方法解決:有一個部分,用戶可以添加儘可能多的列,因爲他/她想要對其進行foreach,但這是單獨的問題。萬分感謝。 – Piotrek