-1

我有一个控制台应用程序,它将由批处理文件触发。应用程序必须从 XML 文件加载配置才能运行...假设如果批处理文件向应用程序发送参数“Env1”。应用程序应仅通过序列化将“Env1”配置加载到 ac# 类。XML 文件格式如下所示。

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

任何帮助将不胜感激

4

4 回答 4

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"];
于 2012-09-18T17:51:44.190 回答
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));
于 2012-09-18T17:32:48.550 回答
0

有很多方法,你谈到 xml 序列化,这需要你在 C# 中有一个可以处理 xml 的对象模型,或者你从对象模型创建你的 xml:http: //www.dotnetjohn.com/articles.aspx?文章ID=173

另一种非常简单的方法是将 xml 文档加载到 xmldocument 对象中并对其进行查询:http ://csharp.net-tutorials.com/xml/using-xpath-with-the-xmldocument-class/

我提供了教程的链接,因为从问题中我认为您可以使用一些关于可能性的背景知识,而不仅仅是一个完整的解决方案。

于 2012-09-18T17:35:19.587 回答
0

绝对没有理由将配置加载到 Xml。.Net 具有允许您以强类型和强命名方式使用配置的配置类。您可以将 appSettings 用于简单的键值条目,也可以轻松定义自己的自定义配置部分(请参阅链接中的示例)。

话虽如此,codeplex 上的Configuration Section Designer工具让您的生活变得更轻松。它允许您通过 Visual Studio(包括 2010)中的图形插件来定义这些部分,它会自行生成自定义部分的类定义。试试看,太棒了:-)

于 2012-09-18T17:59:38.603 回答