使用Linq从复杂的XML中提取数据 [英] Extract data from complex XML using Linq

查看:60
本文介绍了使用Linq从复杂的XML中提取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML遵循

<Feed>
<Control>
    <UserName>testUser</UserName>
    <Password>testPass</Password>
</Control>
<leeds>
    <leed>
        <leedid>4990935</leedid>
        <Reference>4990935</Reference>
        <AccidentDetails>
            <IncidentDate>2015-08-05</IncidentDate>
            <AccidentDetails>damage</AccidentDetails>
        </AccidentDetails>
        <ClientDetails>
            <ClientsID>4990935</ClientsID>
            <ClientsName>Test Name</ClientsName>
        </ClientDetails>
        <IncidentDetails>
            <IncidentID>557475</IncidentID>
            <IncidentName>Injury</IncidentName>
        </IncidentDetails>
    </leed>
<leed>
.......... More Leeds 
</leed>


现在,我正在尝试使用以下Linq提取数据,但是它不能正常工作,请您帮忙.

Now I am trying to Extract Data Using the Following Linq but its not working could you please help.

XDocument xmlDoc = XDocument.Load(path);

        var results = from job in xmlDoc.Root.Elements("Control")
                      let Repairer = job.Parent.Elements("Leeds").FirstOrDefault()

                      select new Job {
                          Username = (string)job.Element("leedid"),
                          Password = (string)job.Element("Reference"),
                          IncidentDetail = (string)job.Element("IncidentDetail"),
                          ClientsName = (string)job.Element("ClientsName"),
                          IncidentName = (string)Repairer.Element("IncidentName")
                      };
                      return result;

我有模型课

public class Control {
    public string Username { get; set; }

    public string Password { get; set; }

    public Leed leeds {get; set;}
} 

public class Leed {

    public int leedid { get; set; }

    public int Reference { get; set; }

    public string IncidentDate { get; set; }

    public string IncidentDetail { get; set; }

    public string ClientsID { get; set; }

    public string ClientsName { get; set; }

    public string IncidentID { get; set; }

    public string IncidentName { get; set; }
}

我对Linq和XML还是很陌生,一个Feed将拥有一个控件和多个选项.

I am very new in Linq and XML, One Feed will have one control and multiple leeds.

推荐答案

根据您的XML,您的Control类不正确.由于您可能在leeds中包含多个leed标记,因此您在Control类中应该具有类似的映射,因此请将其更改为接受一个集合,而不是这样:-

As per your XML, your Control class in not correct. Since you may have multiple leed tags inside leeds so you should have similar mapping in your Control class, so change it to accept a collection instead like this:-

 public List<Leed> leeds { get; set; }

现在,将leeds节点存储在局部变量leeds中,最后再次循环多个leeds.

Now, store the leeds node inside a local variable leeds, finally loop again for multiple leeds.

这应该给您预期的输出:-

This should give you the expected output:-

List<Control> result = (from job in xdoc.Root.Elements("Control")
         let leeds = job.Parent.Element("leeds")
         select new Control
            {
               Username = (string)job.Element("UserName"),
               Password = (string)job.Element("Password"),
               leeds = (from leed in leeds.Elements("leed")
                     let AccidentDtls = leed.Element("AccidentDetails")
                     let ClientDetails = leed.Element("ClientDetails")
                     let IncidentDtls = leed.Element("IncidentDetails")
                     select new Leed
                        {
                          leedid = (int)leed.Element("leedid"),
                          Reference = (int)leed.Element("Reference"),
                          IncidentDate = (string)AccidentDtls.Element("IncidentDate"),
                          IncidentDetail = (string)AccidentDtls.Element("IncidentDetail"),
                          ClientsID = (string)ClientDetails.Element("ClientsID"),
                          ClientsName = (string)ClientDetails.Element("ClientsName"),
                          IncidentID = (string)IncidentDtls.Element("IncidentID"),
                          IncidentName = (string)IncidentDtls.Element("IncidentName")
                        }).ToList()
           }).ToList();

这篇关于使用Linq从复杂的XML中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆