2012-09-18 82 views
-1

我有一個控制檯應用程序將由批處理文件觸發。應用程序必須從XML文件加載配置以運行...假設批處理文件嚮應用程序發送參數「Env1」。應用程序應通過序列化將「Env1」配置僅加載到c#類。 XML文件的格式如下所示..C#從XML文件加載配置

<EnvironmentCollection> 
    <Environment> 
     <Name>Env1</Name> 
     <Url>....</Url> 
    </Environment> 
    <Environment> 
     <Name>Env2</Name> 
     <Url>....</Url> 
    </Environment> 
</EnvironmentCollection> 

任何幫助,將不勝感激 感謝

+3

你需要什麼幫助? [你有什麼嘗試?](http://whathaveyoutried.com) – Adam

+0

如何只加載Env1或Env2的配置通過serilization – Anish

回答

1
XDocument xDoc = XDocument.Load(file); 
var dict = xDoc.Descendants("Environment") 
       .ToDictionary(x => x.Element("Name").Value, 
           x => x.Element("Url").Value); 

和用法是

var url = dict["Env1"]; 
0

首先標記你EnvironmentCollection類爲可序列化。然後你可以用下面的代碼進行反序列化XML回到對象:

/// <summary> 
    /// Deserializes xml file to object 
    /// </summary> 
    /// <param name="filePath"></param> 
    /// <returns></returns> 
    public static object DeSerializeFromXML(string filePath, Type type) 
    { 
     object data = null; 
     System.IO.Stream stream = null; 
     try 
     { 
      stream = System.IO.File.Open(filePath, System.IO.FileMode.Open); 
      System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(type); 
      data = x.Deserialize(new System.Xml.XmlTextReader(stream)); 
      stream.Close(); 
      stream.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      try 
      { 
       stream.Close(); 
       stream.Dispose(); 
      } 
      catch (Exception) 
      { 
      } 
      throw new Exception(ex.Message); 
     } 
     return data; 
    } 

您可以使用此功能是這樣的:

EnvironmentCollection col = (EnvironmentCollection)DeSerializeFromXML("myFile.xml", typeof(EnvironmentCollection)); 
0

有許多方法,請您談一下XML序列化,這將需要你在C#中的對象模型,它能夠處理XML或者您從對象模型的XML:http://www.dotnetjohn.com/articles.aspx?articleid=173

另一種方法,很簡單,就是加載XML文檔中XmlDocument對象和查詢它:http://csharp.net-tutorials.com/xml/using-xpath-with-the-xmldocument-class/

我已經提供了教程鏈接,因爲從這個問題我認爲你可以使用有關可能性的som背景知識而不僅僅是一個完整的解決方案。

0

是絕對沒有理由讓你負載配置爲XML。 .Net有Configuration Class,它允許您以強類型和強命名方式使用配置。您可以使用appSettings進行簡單的鍵值輸入,或者您可以輕鬆定義自己的自定義配置部分(請參閱鏈接中的示例)。

話雖如此,codeplex上的Configuration Section Designer工具使您的生活變得更加輕鬆。它允許您通過Visual Studio中的圖形插件(包括2010)定義這些部分,它將自行生成自定義部分的類定義。試試吧,這太神奇了:-)