如何知道值,如何从应用程序设置文件中读取密钥?

时间:2011-06-13 12:45:17

标签: c# xml

我正在使用C#在.NET Framework中开发一个应用程序,在我的应用程序中,我需要从XML文件中获取值。我编写了以下代码,通过在XML文件中搜索密钥来获取密钥时的值。

        XmlDocument appSettingsDoc = new XmlDocument();
        appSettingsDoc.Load(Assembly.GetExecutingAssembly().Location + ".config");
        XmlNode node = appSettingsDoc.SelectSingleNode("//appSettings");
        XmlElement value = (XmlElement)node.SelectSingleNode(string.Format("//add[@key='{0}']", key));
        return (value.GetAttribute("value"));

但是在给出值时,我无法获取密钥名称,例如,如果文件包含

                    `<add key="keyname" value="keyvalue" />`

如果我提供“keyvalue”,我想获得“keyname”。我知道我正在读取appconfig文件,还有另一种方法(即使用configurationmanager),但我想用XML读取它。 请帮帮我。

谢谢,

Bibhu

6 个答案:

答案 0 :(得分:1)

要根据值找到密钥,您仍然可以使用ConfigurationManager类,看不出有任何理由用自己的代码替换它。

因此,示例代码为:

string myKey = ConfigurationManager.AppSettings.AllKeys.ToList().FirstOrDefault(key =>
{
    return ConfigurationManager.AppSettings[key] == "keyvalue";
});

答案 1 :(得分:1)

这不起作用吗?

XmlDocument appSettingsDoc = new XmlDocument();
appSettingsDoc.Load(Assembly.GetExecutingAssembly().Location + ".config");
XmlNode node = appSettingsDoc.SelectSingleNode("//appSettings");
XmlElement value = (XmlElement)node.SelectSingleNode(string.Format("//add[@value='{0}']", value));
return (value.GetAttribute("key"));

请注意,此系统假定您的appSettings中的每个值都是唯一的,否则您只会获得具有指定值的第一个键。

顺便提一下,如果我实现这个,我只需要从ConfigurationManager.AppSettings字典构造一个新字典,使用值作为键和键作为值。当已经为你解析成字典时,通过XML接口读取配置文件的appSettings部分绝对是代码味道。

答案 2 :(得分:1)

尝试使用此方法

   private static string readConfig(string value)
    {
        System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath);
        System.Configuration.AppSettingsSection ass = config.AppSettings;
        foreach (System.Configuration.KeyValueConfigurationElement item in ass.Settings)
        {
            if (item.Value == value)
                return item.Key;
        }
        return null;
    }

答案 3 :(得分:0)

而不是

<add key="keyname" value="keyvalue" />

使用

<add key="keyvalue" value="keyname" />

这就是它的意义。

答案 4 :(得分:0)

使用XPath查询,没有时间模拟一个。

答案 5 :(得分:0)

尝试像这样使用Linq到XMl

XDocument loaded = XDocument.Load(@"XmlFile.xml");
var q = from c in loaded.Descendants("add")
        where (String)c.Attribute("value") == "value1"
        select c;
foreach(var item in q)
     Console.WriteLine(item.Attribute("key").Value);