在machine.config文件中有第三方软件写的元素,所以看起来像这样:
<configuration>
<configSections>
...
</configSections>
...
<Custom>
<Level1> ...
</Level1>
<Level2> ...
</Level2>
<Level3>
<add key="key_text1" value="s1" />
<add key="key_text2" value="s2" />
<add key="key_text3" value="s3" />
</Level3>
</Custom>
</configuration>
我想得到,例如“value”属性的值(“s2”),其中key =“key_text2”来自配置/ Custom / Level3节点。到目前为止,我尝试将machine.config作为XML打开并从那里开始工作:
Configuration config = ConfigurationManager.OpenMachineConfiguration();
XmlDocument doc = new XmlDocument();
doc.LoadXml(config.FilePath);
但是,我得到XmlException“根级别的数据无效。”我也不知道如何直接使用Configuration类方法来完成这项工作。任何想法都将不胜感激。
答案 0 :(得分:2)
使用RuntimeEnvironment.SystemConfigurationFile获取 machine.config 位置:
XmlDocument doc = new XmlDocument();
doc.Load(RuntimeEnvironment.SystemConfigurationFile);
为什么不将Linq用于Xml?
XDocument xdoc = XDocument.Load(RuntimeEnvironment.SystemConfigurationFile);
var element = xdoc.XPathSelectElement("//Custom/Level3/add[@value='s2']");
if (element != null)
key = (string)element.Attribute("key");
答案 1 :(得分:1)
尝试使用Load()
方法代替LoadXml()
doc.Load(config.FilePath);
我还建议您查看XDocument而不是XmlDocument。从配置文件中获取该值时, LINQ 将非常有用。