用Linq在C#中提取XML数据难度
问题描述:
所以我正在阅读一个xml文件来创建一个字典,但我无法弄清楚如何访问我想要的xml字段。用Linq在C#中提取XML数据难度
以下是我想要阅读的XML格式。
<Days>
<Day Name="Monday">
<Task Order="1">TestTask</Task>
<Task Order="2">Test2</Task>
</Day>
</Days>
下面是我到目前为止的代码。我已经尝试了很多变种来寻找任务和顺序,比如任务:(string)e,或者e.ToString()或者e.Elements(“Task”)。Value.ToString();而对于订单e.Attributes(“Order”)。ToString();
string today = DateTime.Now.ToString("dddd");
var allItems = new Dictionary<string, int>();
XElement root = XElement.Parse(_orderxml);
IEnumerable<XElement> address =
from el in root.Elements("Day")
where el.Attribute("Name").Value == today
select el;
foreach (XElement e in address)
{
string task = ???;
string order = ???;
allItems.Add(task, (int)order);
}
到目前为止,这些都没有给我正确的结果,而我真的不能确定什么样的合适的方式来获得这些数据,所以任何帮助,将不胜感激!
答
添加第二个循环迭代的任务和提取值
static void Main()
{
string _orderxml = @"<Days> <Day Name=""Wednesday""> <Task Order=""1"">TestTask</Task> <Task Order=""2"">Test2</Task> </Day></Days>";
string today = DateTime.Now.ToString("dddd");
var allItems = new Dictionary<string, int>();
XElement root = XElement.Parse(_orderxml);
IEnumerable<XElement> address =
from el in root.Elements("Day")
where el.Attribute("Name").Value == today
select el;
foreach (XElement e in address)
{
foreach (XElement t in e.Descendants())
{
string task = t.Value.ToString();
int order = int.Parse(t.Attribute("Order").Value.ToString());
allItems.Add(task, (int)order);
}
}
}
或者你可以用LINQ查询这样
var result=root.Descendants("Day").Where(d=>d.Attribute("Name").Value==today).Descendants("Task").Select(x => new {Task=x.Value,Order=x.Attribute("Order") });
做,或创建一个从匿名对象
字典var result = root.Descendants("Day").Where(d=>d.Attribute("Name").Value==today).Select(x => new { Task = x.Value.ToString(), Order = x.Attribute("Order") }).ToDictionary(c => c.Task, c => c.Order);
或者直接从linq查询创建字典
var result = root.Descendants("Day").Where(d=>d.Attribute("Name").Value==today).ToDictionary(c => c.Value.ToString(), c => int.Parse(c.Attribute("Order").Value.ToString()));