2014-10-30 63 views
2

我有一个app.exe.config文件,我试图通过XmlDocument读取它。但是,下面的代码不工作(获得了一个空值):使用XmlDocument阅读app.config

XmlDocument appSettingsDoc = new XmlDocument(); 
appSettingsDoc.Load(@"C:\DBUpgraderConfig\DBUpgrader.exe.config"); 
XmlNode node = appSettingsDoc.SelectSingleNode("//appSettings"); 
XmlElement value = (XmlElement)node.SelectSingleNode("UserName"); 

这里是XML:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="Server" value="Xeon-s7\MSSQL2008"/> 
    <add key="Username" value=""/> 
    <add key="Password" value=""/> 
    </appSettings> 
    <startup> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 
+0

什么不起作用? – 2014-10-30 12:30:42

+0

值出现为空 – 2014-10-30 12:31:04

+0

是'node' null还是'value'? – 2014-10-30 12:32:56

回答

2

您应该比较属性key,而不是尝试将其作为节点名称:

XmlElement value = (XmlElement)node.SelectSingleNode("//add[@key='Username']"); 

这会得到你的add节点。你可以随心所欲地做任何事情,包括获得属性value

string val = value.Attributes["value"].Value; 
2

这是一个更容易使用XPath表达式:

var appSettingsDoc = XmlDocument.Load(@"C:\DBUpgraderConfig\DBUpgrader.exe.config"); 

var node = appSettingsDoc.XPathSelectElement("//configuration/appSettings/add[@key = 'Username']"); 

// for example: 
node.Attribute["value"].Value = "John Doe"; 
1

您正在搜索用户ň火焰,但你有用户ň火焰定义。

+0

这只是问题的一部分,但你对错字是正确的。 – 2014-10-30 12:42:31