2010-07-12 59 views
4

我需要從web.config中讀取配置元素。 讓這是我的web.config。如何從web.config中讀取嵌套的配置元素?

<family> 
    <parents> 
    <child name="Hello"/> 
    <child name="World"/> 
    </parents> 
<parents> 
    <child name="Hello1"/> 
    <child name="World2"/> 
    </parents> 
</family> 

所以我有這樣的事情,我需要讀這個集合。 我該怎麼做?

回答

2

您需要定義您自己的自定義配置部分,這將允許您正確地讀取嵌套的配置元素。順便說一句,這是所有其他人使用同樣的方法,比如企業庫組件,NHibernate的,等

你需要採取的步驟非常簡單,並且在這裏提供的教程:

http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

0

您需要使用ConfigurationElementCollection類。 見this sample在MSDN

3

在一般情況下,你可以存儲簡單的應用程序設置和在web.config中(或app.config)中的連接字符串,但任何事情更復雜,像一個對象圖或XML(如你的情況)你應該考慮一種不同的方法。

這些可以是有幫助的:

How do I store an XML value in my .NET App.Config file

(它表明編碼在一個應用程序的設置的XML)

然而這將是最好有一個單獨的XML數據文件,並使用Linq-To-XML(請參閱reference)或XPath以及XmlDocument和相關類將其轉換爲對象圖。


編輯:看到另一個答案,它允許配置文件中的XML。這是對你的確切問題的更直接的回答,但我會留在這裏作爲參考。總的來說,它看起來像你的數據是沒有配置數據(更像運行時/用戶數據),並不屬於.config文件:所以我建議將它存儲在一個單獨的XML文件中,並有一個配置文件條目指向單獨的XML文件的文件名。


希望幫助!

+0

我想要做這樣的事情。 vbcity.com/forums/t/161393.aspx,我得到空值 – nimi 2010-07-12 13:07:59

0
public struct Child 
{ 
    public string name; 
    public Child(string name) 
    { 
     this.name = name; 
    } 
} 

public class Parent 
{ 
    public List<Child> childs = new List<Child>(); 

    public static List<Parent> ReadParentsFromXml(string fileName) 
    { 
     List<Parent> parents = new List<Parent>(); 
     System.Xml.XmlTextReader doc = new System.Xml.XmlTextReader(fileName); 
     Parent element = new Parent(); 

     while (doc.Read()) 
     { 
      switch (doc.Name) 
      { 
       case "parents": 
        if (doc.NodeType == System.Xml.XmlNodeType.EndElement) 
        { 
         parents.Add(element); 
         element = new Parent(); 
        } 
        break; 
       case "child": 
        if(doc.NodeType != System.Xml.XmlNodeType.EndElement) 
         element.childs.Add(new Child(doc.GetAttribute(0))); 
        break; 
      } 
     } 

     return parents; 
    } 
} 
+1

我猜這個代碼是讀取正常的xml文件。我必須使用配置元素來讀取web.config。 – nimi 2010-07-12 13:03:38

+0

我正在嘗試做這樣的事情。 http://vbcity.com/forums/t/161393.aspx,我得到空值。 – nimi 2010-07-12 13:07:42