使用XmlDocument读取app.config文件

9
我有一个app.exe.config文件,我正在尝试通过XmlDocument读取它。然而,下面的代码不起作用(得到的值为null):
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>

值为空。 - Akshay J
node 是空的还是 value - Patrick Hofman
值为空,节点具有良好的数据。 - Akshay J
问题在于没有名为UserName的节点,而只有一个名为add的节点,其属性KeyUserName。您需要使用不同的XPath查询来获取具有所需属性值的元素。 - Thorsten Dittmar
3个回答

11

你应该比较属性 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
你正在搜索用户名,但已经定义了用户名。

这只是问题的一部分,但你关于错别字是正确的。 - Patrick Hofman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接