Linq to xml 使用LINQ to XML时选择正确的节点

Linq to xml 使用LINQ to XML时选择正确的节点,linq-to-xml,Linq To Xml,我有另一个程序正在使用的xml文件。它指向几个ini文件的路径,我对提取它们感兴趣。它们是-标记下带有key=“config1”(或cofig2等)的-标记。这是我想读的一个示例文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!-- Comment --> <add key="config1" value="\\server

我有另一个程序正在使用的xml文件。它指向几个ini文件的路径,我对提取它们感兴趣。它们是
-标记下带有
key=“config1”
(或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>
但它没有返回任何节点。如何使用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");

而且也没有返回任何节点。

首先,为什么要使用
XElement.Load
而不是
XDocument.Load
?您的XML文件显然是一个XML文档,因此应该将其加载到
XDocument
实例中

var doc = XDocument.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config");
现在回到查询。第一个方法没有返回任何值,因为
Elements
方法只查看当前元素的直接子元素。第二个也不起作用,因为您试图获取
元素,而不是

您的查询应该是:

var paths = from add in doc.Root.Element("appSettings").Elements("add")
            where ((string)add.Attribute("key")).StartsWith("config")
            select (string)add.Attribute("value");
var doc = XDocument.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config");
var paths = from add in doc.Root.Element("appSettings").Elements("add")
            where ((string)add.Attribute("key")).StartsWith("config")
            select (string)add.Attribute("value");