【问题标题】:How to read nested configuration element from the web.config?如何从 web.config 中读取嵌套配置元素?
【发布时间】:2011-03-14 18:48:23
【问题描述】:

我需要从 web.config 中读取配置元素。 让它成为我的 web.config。

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

所以我有这样的东西,我需要将它读入一个集合。 我该怎么做????

【问题讨论】:

    标签: c# asp.net xml


    【解决方案1】:

    通常,您可以将简单的应用程序设置和连接字符串存储在 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 文件的文件名的配置文件条目。


    希望有帮助!

    【讨论】:

    • 我正在尝试做这样的事情。 vbcity.com/forums/t/161393.aspx,我得到空值
    【解决方案2】:

    您需要定义自己的自定义配置部分,这将允许您正确读取嵌套配置元素。顺便说一句,这与所有其他人使用的方法相同,例如企业库组件、NHibernate 等。

    您需要采取的步骤非常简单,此处提供了教程:

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

    【讨论】:

      【解决方案3】:

      您需要使用 ConfigurationElementCollection 类。 请参阅 MSDN 上的 this sample

      【讨论】:

        【解决方案4】:
        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;
            }
        }
        

        【讨论】:

        • 我猜这段代码是为了读取普通的xml文件。我必须使用配置元素阅读 web.config。
        • 我正在尝试做这样的事情。 vbcity.com/forums/t/161393.aspx ,我得到空值。
        猜你喜欢
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2012-01-02
        • 2021-11-09
        • 2021-09-04
        • 2018-06-03
        • 2021-10-21
        相关资源
        最近更新 更多