[英]read xml file using linq
我有以下xml文件
<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
</User>
</Users>
我想使用linq來提取用戶名是“John Smith”的測試的日期和點數。
我將如何構建我的linq?
我做了以下,但沒有按我的意願工作:
XElement main = XElement.Load(@"users.xml");
string t = "John Smith";
var v = from user in main.Elements("User")
where t == users.Element("Name").Value
select users;
MessageBox.Show(v.First().Element("Date").Value.ToString());
我不確定你希望輸出的格式是什么,但這個示例代碼應該得到日期和點。 這會將結果投影為匿名類型:
class Program
{
static void Main(string[] args)
{
XElement main = XElement.Load(@"users.xml");
var results = main.Descendants("User")
.Descendants("Name")
.Where(e => e.Value == "John Smith")
.Select(e => e.Parent)
.Descendants("test")
.Select(e => new { date = e.Descendants("Date").FirstOrDefault().Value, points = e.Descendants("points").FirstOrDefault().Value });
foreach (var result in results)
Console.WriteLine("{0}, {1}", result.date, result.points);
Console.ReadLine();
}
}
輸出是:
23.05.2011, 33
22.06.2011, 29
XDocument main = XDocument.Load(@"users.xml");
string t = "John Smith";
var v = from user in main.Descendants("User")
where t == user.Element("Name").Value
select user;
MessageBox.Show(v.First().Element("Date").Value.ToString());
應該做的伎倆。
試試吧
class Program
{
static void Main(string[] args)
{
XElement main = XElement.Parse(
@"<Users>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
</User>
</Users>");
var users =
from m in main.Elements("User")
where (string)m.Element("Name") == "John Smith"
select (m.Descendants("test").Descendants("Date").FirstOrDefault().Value);
foreach (var user in users)
Console.WriteLine(user);
Console.ReadLine();
}
}
問候
關於向John Smith添加另一個節點的另一個問題,這將是解決方案:
class Program
{
static void Main(string[] args)
{
XElement main = XElement.Parse(
@"<Users>
<User>
<Name>Alex</Name>
<test>
<Date>08.05.2011</Date>
<points>4</points>
</test>
</User>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
</User>
</Users>");
var users =
from m in main.Elements("User")
where (string)m.Element("Name") == "John Smith"
select (m.Descendants("test").Descendants("Date").FirstOrDefault().Value);
XElement Mercury = main.Elements("User").Where(p => (String)p.Element("Name") == "John Smith").FirstOrDefault();
Mercury.Add(new XElement("test", new XElement("Date", "06.06.2011"), new XElement("points", "01")));
foreach (var user in main.Elements())
Console.WriteLine(user);
Console.ReadLine();
}
}
給出下一個預期結果:
<User>
<Name>Alex</Name>
<test>
<Date>08.05.2011</Date>
<points>4</points>
</test>
</User>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
<test>
<Date>06.06.2011</Date>
<points>01</points>
</test>
</User>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.