C# LINQ到Xml列表错误查询
我想用LINQ从xml文件中获取一些数据,但我没有得到。 这是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
<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();