我有一个其他程序正在使用的xml文件。它指向一对ini文件的路径,我有兴趣提取它们。它们是<add>
- 标签,key="config1"
标签下有<appSettings>
(或cofig2等)。这是我想要阅读的示例文件。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- Comment -->
<add key="config1" value="\\server1\software\pgrTool\Standard.ini.xml" />
<!--<add key="config2" value="C:\HeadQuarter\PgrTool.xml" />-->
<add key="config2" value="\\server1\software\pgrTool\Standard.xml" />
<add key="hide-REM" value="no" />
</appSettings>
</configuration>
我想要节点
<add key="config1" value="\\server1\software\pgrTool\Standard.ini.xml" />
<add key="config2" value="\\server1\software\pgrTool\Standard.xml" />
我尝试了以下Linq查询:
var iniman = from c in XElement.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config").Elements("add")
where c.Attribute("key").Value.StartsWith("config")
select c.Attribute("value");
但它没有返回任何节点。如何使用LINQ to XML专门选择这些行和任何其他配置? - ?
修改:我试过了
var configs = var iniman2 = from c in XElement.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config").Elements("configuration").Elements("appSettings")
where c.Attribute("key").Value.StartsWith("config")
select c.Attribute("value");
这也没有返回任何节点。
答案 0 :(得分:0)
首先,您为什么使用XElement.Load
代替XDocument.Load
?您的XML文件显然是一个XML文档,因此您应该将其加载到XDocument
实例。
var doc = XDocument.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config");
现在回到查询。您的第一个没有返回任何值,因为Elements
方法只查看当前元素的直接子元素。第二个也不起作用,因为您试图获取<appSettings>
元素而不是<add>
。
您的查询应该是:
var paths = from add in doc.Root.Element("appSettings").Elements("add")
where ((string)add.Attribute("key")).StartsWith("config")
select (string)add.Attribute("value");