C# XML:使用LINQ获取数据

C# XML:使用LINQ获取数据,c#,xml,linq,xml-parsing,C#,Xml,Linq,Xml Parsing,所以,我开始了这个项目,我甚至不知道如何寻找它。 我有一个非常简单的XML文件: version="1.0" encoding="utf-8" ?> <AI> <ai> <id>1</id> <name>NAME</name> ... </ai> </AI> version=“1.0”encoding=“utf-8”> 1. 名称 ... 我想搜索“name”

所以,我开始了这个项目,我甚至不知道如何寻找它。 我有一个非常简单的XML文件:

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

我想搜索“name”元素,得到结果的“id”元素。我尝试了很多方法,其中大多数都写了一些奇怪的东西…

我扩展了您的示例以包含更多的
标记,因此结果更清晰

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

类程序
{
//示例xml字符串。
静态字符串xml=@“
1.
名称
2.
姓名2
3.
名字3
";
静态void Main(字符串[]参数)
{
//读字符串。
XElement-xelem=XElement.Parse(xml);
var results=xelem.subjections(“ai”)//获取所有节点。
.选择(x=>
新的
{
//从和获取值。
//使用匿名类型存储结果。
id=x.id.First()值,
name=x.name(“name”).First()值,
});
//过滤掉所需的结果。
var filtered=results.Where(x=>x.name==“name”).First().id;
}
}

stackoverflow上有许多示例,向您展示了如何使用xml链接解析xml。先搜索再发布。顺便说一句,发布您尝试过的内容,以便我们纠正您的错误。我现在尝试了Xpath,似乎不起作用,一些看起来很奇怪的代码,例如var n=doc.Root.Elements().Select(x=>x.Element(“id”);就像我说的搜索堆栈溢出如何使用line to xml。我已经回答了有关使用XElement的问题。请参阅
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;
    }
}