【问题标题】:Selecting the right nodes when using LINQ to XML使用 LINQ to XML 时选择正确的节点
【发布时间】:2012-08-21 11:50:08
【问题描述】:

我有另一个程序正在使用的 xml 文件。它指向几个ini文件的路径,我有兴趣提取它们。它们是<add>-tags,在<appSettings>-tag 下带有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>

我想要节点

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

这也没有返回任何节点。

【问题讨论】:

    标签: linq-to-xml


    【解决方案1】:

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

    var doc = XDocument.Load(@"C:\Program Files\pgrTool\pgrTool.exe.config");
    

    现在回到查询。你的第一个没有返回任何值,因为Elements 方法只查看当前元素的直接子元素。第二个也不起作用,因为您尝试获取 &lt;appSettings&gt; 元素而不是 &lt;add&gt;

    您的查询应该是:

    var paths = from add in doc.Root.Element("appSettings").Elements("add")
                where ((string)add.Attribute("key")).StartsWith("config")
                select (string)add.Attribute("value");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多