繁体   English   中英

使用C#难度的Linq提取XML数据

[英]Extracting XML data with Linq in C# difficulty

因此,我正在阅读xml文件以创建字典,但是我不知道如何访问所需的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()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM