0

我有另一个程序正在使用的 xml 文件。它指向几个ini文件的路径,我有兴趣提取它们。它们是在-tag 下<add>带有key="config1"(或 cofig2 等)的 -tags <appSettings>。这是我要阅读的示例文件。

<?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");

这也没有返回任何节点。

4

1 回答 1

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");
于 2013-08-16T20:50:08.457 回答