XML:使用LINQ获取数据

时间:2015-03-13 22:40:09

标签: c# xml linq xml-parsing

所以,我开始了这个项目,我不知道如何搜索它。

我有这个非常简单的XML文件:

version="1.0" encoding="utf-8" ?>
<AI>
  <ai>
    <id>1</id>
    <name>NAME</name>
    ...
  </ai>
</AI>

我想搜索“name”元素获取结果的“id”元素。我尝试了很多方法,大多数都写了一些古怪的东西......

1 个答案:

答案 0 :(得分:0)

我将您的示例扩展为包含更多<ai>标记,以便结果更清晰。

首先我将xml转换为XElement。如果您使用的是文件,则可以使用XDocument来解析整个文件。接下来,我转到<ai>节点并将其内容提取为匿名类型。然后,当您提取内容时,可以使用简单的LINQ表达式轻松搜索它。在下面的示例中,我将返回id,其中name等于"NAME"

class Program
{
    // A sample xml string.
    static string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
                    <AI>
                      <ai>
                        <id>1</id>
                        <name>NAME</name>
                      </ai>
                      <ai>
                        <id>2</id>
                        <name>NAME2</name>
                      </ai>
                      <ai>
                        <id>3</id>
                        <name>NAME3</name>
                      </ai>
                    </AI>";

    static void Main(string[] args)
    {
        // Read the string.
        XElement xelem = XElement.Parse(xml);

        var results = xelem.Descendants("ai")    // Get all <ai> nodes.
                           .Select(x =>
                           new
                           {
                               // Get values from <id> and <name>.
                               // Use anonymous types to store the results.
                               id = x.Descendants("id").First().Value,       
                               name = x.Descendants("name").First().Value,    
                           });

        // Filter out required result.
        var filtered = results.Where(x => x.name == "NAME").First().id;
    }
}