读取XML嵌套节点值

时间:2013-09-24 19:53:31

标签: c# xml linq linq-to-xml

在XML文件中抓取值时出现问题 结构如下

<configuration>
    <settings>
       <add key="folder" value = "c:\...." />
    </settings>
</configuration>

我希望能够从文件夹中读取值。

string val = string.Empty;

        foreach (XElement element in XElement.Load(file).Elements("configuration"))
        {
            foreach (XElement element2 in element.Elements("settings"))
            {
                if (element2.Name.Equals("folder"))
                {
                    val = element2.Attribute(key).Value;
                    break;
                }
            }
        }

        return val;

2 个答案:

答案 0 :(得分:2)

元素的名称不是folder ...这是key属性的值。另请注意,当您使用XElement.Load时,元素 configuration元素 - 要求Elements("configuration")会为您提供一个空集合。您可以加载XDocument,或者只是假设您在configuration元素上,并在settings下方查看。

我想你想要:

return XElement.Load(file)
               .Elements("settings")
               .Elements("add")
               .Where(x => (string) x.Attribute("key") == "folder")
               .Select(x => (string) x.Attribute("value"))
               .FirstOrDefault();

答案 1 :(得分:1)

您可以使用XPath:

var folder = XElement.Load(file)
                     .XPathSelectElements("/settings/add[@key='folder']")
                     .Select(a => (string)a.Attribute("value"))
                     .FirstOrDefault();