C# LINQ到Xml列表错误查询

C# LINQ到Xml列表错误查询,c#,xml,linq,list,linq-to-xml,C#,Xml,Linq,List,Linq To Xml,我想用LINQ从xml文件中获取一些数据,但我没有得到。 这是xml文件: <Data> <Customer> <Name>bla1</Name> <d1> <IP>888.888.888.888</IP> <UserLogin>userxy</UserLogin> <UserPw>pwxy</Use

我想用LINQ从xml文件中获取一些数据,但我没有得到。 这是xml文件:

<Data>
  <Customer>
    <Name>bla1</Name>
      <d1>
        <IP>888.888.888.888</IP>
        <UserLogin>userxy</UserLogin>
        <UserPw>pwxy</UserPw>
      </d1>
      <d2>
        <IP>889.889.889.889</IP>
        <UserLogin>userzp</UserLogin>
        <UserPw>pwzp</UserPw>
      </d2>
  </Customer>
</Data>

试试这个它对我有用

var xml = XDocument.Load("IPs.xml");
            var Ips = from ip in xml.Descendants("IP")
                      select ip.Value;
根据上述代码

第1行将帮助您使用XDocument.load方法加载xml, IPs.xml是xml文件的名称

一旦你用第二行代码加载了xml,你就会有Ips作为字符串列表,其中包含 xml中的元素IP 例如,我想将特定客户的所有IP放入列表中

我猜您正在使用Linq2Xml和Xpath寻找类似的东西

var xDoc = XDocument.Parse(xmlstring); // XDocument.Load(filename)

string custName = "bla1";

var ips = xDoc.XPathSelectElement("//Customer[Name[text()='" + custName  + "']]")
            .Descendants("IP")
            .Select(x => (string)x)
            .ToList();
编辑

让我们使用纯Linq让@Bobson感到高兴

var ips = xDoc.Descendants("Customer")
        .FirstOrDefault(c=>c.Elements("Name").Any(e=>(string)e==custName))
        .Descendants("IP")
        .Select(x => (string)x)
        .ToList();

以下是一个基于LINQ查询语法的解决方案:

字符串customerName=bla1; XElement dataElem=XElement.ParsedataXml; var IP地址= 来自dataElem.ElementsCustomer中的customerElem 其中stringcustomerElem.ElementName==customerName 来自customereem.genderantsip中的ipElem 选择stringipElem; IP地址中的foreach var IP地址 { Console.WriteLine[{0}],ipAddress; } 请参阅下面的完整工作示例及其预期输出。另请参阅

预期产出:

[888.888.888.888] [889.889.889.889] 节目:

使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用System.Xml; 使用System.Xml.Linq; 名称空间LinqQuerySyntaxDemo { 公共课程 { 静态公共字符串[]args { 字符串customerName=bla1; XElement dataElem=XElement.ParseGetXml; var IP地址= 来自dataElem.ElementsCustomer中的customerElem 其中stringcustomerElem.ElementName==customerName 来自customereem.genderantsip中的ipElem 选择stringipElem; IP地址中的foreach var IP地址 { Console.WriteLine[{0}],ipAddress; } } 静态字符串GetXml { 回来 @ 布拉1 888.888.888.888 用户XY pwxy 889.889.889.889 userzp pwzp ; } } }
我认为这是一个XY问题-您不应该在并行集合中存储数据。创建一个具有3个属性的类:IP、UserLogin和UserPw,并将其存储在该类实例的列表中。请在此阅读更多相关信息:嗨,谢谢你的回答!但我真的不明白,怎么解决这个问题。问题仍然是LINQ部分。或者我必须重新组织xml文件吗迷惑:什么是XY问题?XY问题:真丢脸,我在谷歌上搜索了c XY问题。谢谢:谢谢,谢谢你的回答。它应该如何运作。非常感谢。不知道XPath。。。东西明天我们将对此进行讨论:@Sylverblade-XPath很难看,LINQ to SQL旨在帮助避免它,但有时它只是让事情变得更简单。嘿,我当然愿意听取其他帮助我的建议或提示:@Bobson LINQ to SQL?这个SQL/数据库在哪里?如果你指的是Linq2Object或Linq2Xml,你认为答案是什么?@EZI-你说得对。我习惯性地键入SQL——我的意思是Linq2Xml。这是漫长的一天。谢谢你回答我对XPath的非理性偏见。你能更详细地说明你在做什么,以及它如何帮助解决手头的问题吗?
var ips = xDoc.Descendants("Customer")
        .FirstOrDefault(c=>c.Elements("Name").Any(e=>(string)e==custName))
        .Descendants("IP")
        .Select(x => (string)x)
        .ToList();