2014-04-01 38 views
-1

從XML文件中的值複製到變量我有一個* .xml文件是這樣的:如何在C#

<?xml version="1.0" encoding="utf-8" ?> 
- <!-- User settings 
    --> 
- <Settings> 
    <Session_File>C:\programs\Notepad++Portable\help.html</Session_File> 
    <Training_catalogue>C:\Windows\Cursors\aero_ew.cur</Training_catalogue> 
    <Users_ID>C:\Windows\_default.pif</Users_ID> 
    <File_with_badge_ID>C:\Windows\PFRO.log</File_with_badge_ID> 
    <Session_Folder>C:\Program Files</Session_Folder> 
    <PDF_Folder>C:\Program Files\GRETECH\GomPlayer\logos</PDF_Folder> 
    </Settings> 

我想將每個「路徑」給一個變量。 例如「String user_id = C:\ Windows_default.pif」我有以下代碼來讀取XML文件。

//Read values from xml file 
XElement xelement = XElement.Load("settings.xml"); 
IEnumerable<XElement> employees = xelement.Elements(); 
// Read the entire XML 
foreach (var employee in employees) 
{ 
    Maybe in this place I have to write some code 
} 

請幫我

+2

是的,你必須寫一些代碼 –

+0

的http:// MSDN .microsoft.com/en-us/library/cc189056(v = vs.95).aspx google是你的朋友! – mituw16

+1

看起來你有一個固定的數據模型。我建議你考慮使用'XmlSerializer'來輕鬆讀取XML數據並建立一個好的類來存儲信息。這裏有一個基本的教程:http://tech.pro/tutorial/798/csharp-tutorial-xml-serialization –

回答

0

你可以使用在這種情況下,哪個鍵是元素的名稱和值路徑Dictionary<string,string>

var settings = XDocument.Load("settings.xml").Root 
       .Elements() 
       .ToDictionary(x => x.Name, x => (string)x); 

然後,您可以通過它訪問的每個路徑的元素名稱。例如:settings["Users_ID"]將返回C:\Windows\_default.pif

0

如果這些是XML中的靜態字段,則可以使用數據序列化爲一個類ContractSerializer(或XMLSerializer的)...

using System.Runtime.Serialization; 
using System.IO; 

(還需要添加引用System.Runtime.Serialization)

[DataContract] 
public class Settings 
{ 
    [DataMember] 
    public string Session_File { get; set; } 
    [DataMember] 
    public string Training_catalogue { get; set; } 
    [DataMember] 
    public string Users_ID { get; set; } 
    [DataMember] 
    public string File_with_badge_ID { get; set; } 
    [DataMember] 
    public string Session_Folder { get; set; } 
    [DataMember] 
    public string PDF_Folder { get; set; } 

    public static Settings ReadSettings(string Filename) 
    { 
     using (var stream = new FileStream(Filename, FileMode.OpenOrCreate)) 
      try 
      { 
       return new DataContractSerializer(typeof(Settings)).ReadObject(stream) as Settings; 
      } 
      catch { return new Settings(); } 
    } 
    public void Save(string Filename) 
    { 
     using (var stream = new FileStream(Filename, FileMode.Create, FileAccess.Write)) 
      new DataContractSerializer(typeof(Settings)).WriteObject(stream, this); 
    } 
    public Settings() 
    { 
     //defaults 
    } 
}