我有一个控制台应用程序,它将由批处理文件触发。应用程序必须从XML文件加载配置才能运行...假设批处理文件向应用程序发送参数“Env1”。应用程序应通过序列化仅将“Env1”配置加载到c#类。 XML文件格式如下所示..
<EnvironmentCollection>
<Environment>
<Name>Env1</Name>
<Url>....</Url>
</Environment>
<Environment>
<Name>Env2</Name>
<Url>....</Url>
</Environment>
</EnvironmentCollection>
任何帮助都将受到极大的赞赏 感谢
答案 0 :(得分: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"];
答案 1 :(得分: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));
答案 2 :(得分: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背景知识来了解可能性,而不仅仅是一个完整的解决方案。
答案 3 :(得分:0)
您绝对没有理由将配置加载到Xml。 .Net具有Configuration Class,允许您以强类型和强名称方式处理配置。您可以将appSettings用于简单的键值条目,也可以轻松定义自己的自定义配置部分(请参阅链接中的示例)。
话虽如此,codeplex上的Configuration Section Designer工具让您的生活更轻松。它允许您通过Visual Studio(包括2010)中的图形加载项定义节,并且它将自己生成自定义节的类定义。尝试一下,这太棒了: - )