2014-10-30 62 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