2013-02-14 141 views
0

男孩我在Linq密集... Linq特别是XML。我试图让把这个...Linq to XML问题

<?xml version="1.0"?> 
<Template> 
    <TemplateData> 
     <Data> 
      <ACTIVE>A</ACTIVE> 
      <FIRST_NAME> JASON</FIRST_NAME> 
      <LAST_NAME>ABATE</LAST_NAME> 
      <DOB>2/11/2013 12:01:36 PM</DOB> 
      <PHONE/> 
       </Data> 
     </TemplateData> 
</Template> 

进入这个......

IEnumerable<DatModel> 

哪里DatModel等于这个...

public class DatModel{ 
     public int ACTIVE{ get; set; } 
     public int FIRST_NAME{ get; set; } 
     public int LAST_NAME{ get; set; } 
     public int DOB{ get; set; } 
     public string PHONE{ get; set; } 
} 

这就是我试图做...

IEnumerable<DatModel> templates = (IEnumerable<DatModel>) 
          from templatesList in xDocument.Descendants("Template") 
          select new TemplateModel{ 
    Template = (
           from template in templatesList.Element("TemplateData").Elements("Data") 
    select new DataModel{ 
    ACTIVE = template.Element("ACTIVE").Value, 
)}.ToList() 
}; 

我的名单一直在你u p为空。我不确定为什么会这样。我究竟做错了什么?

+0

上的元素( “ACOData”)一个错字? (应该是“数据”)?你是否试图将“0A”转换为Int32? – jbl 2013-02-14 16:53:39

+0

对不起,这是一个不同的属性错字。我不想打印出我的整个对象......病态修复 – SoftwareSavant 2013-02-14 16:54:41

回答

1

清理代码一点点把它编译并加入一些ToList(),它似乎工作。 (我用匿名类)

private static String s = @"<?xml version=""1.0""?> 
    <Template> 
    <TemplateData> 
    <Data> 
     <ACTIVE>A</ACTIVE> 
     <FIRST_NAME> JASON</FIRST_NAME> 
     <LAST_NAME>ABATE</LAST_NAME> 
     <DOB>2/11/2013 12:01:36 PM</DOB> 
     <PHONE/> 
      </Data> 
     </TemplateData> 
    </Template>"; 

[Test] 
public void myTest() 
{ 

    XDocument xDocument = XDocument.Parse(s); 

    var t = (from templatesList in xDocument.Descendants("Template") 
      select new 
       { 
        Template = (from template in templatesList.Element("TemplateData").Elements("Data") 
           select new 
            { 
             ACTIVE = template.Element("ACTIVE").Value 
            }).ToList() 
       }).ToList(); 

    Assert.AreEqual("A",t[0].Template[0].ACTIVE); 

}

+0

它实际上是在工作......当我尝试匹配模型中的数据类型时,我只是在某处做了一些愚蠢的事情。感谢您的理智检查。 – SoftwareSavant 2013-02-14 18:28:25

0

您的模型定义不正确(数据类型错误)。也使用适当的命名对话。

试试这个:

public class DatModel 
{ 
    public string Active { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime Dob { get; set; } 
    public string Phone { get; set; } 
} 


string xml = @"<?xml version=""1.0""?> 
       <Template> 
        <TemplateData> 
         <Data> 
          <ACTIVE>A</ACTIVE> 
          <FIRST_NAME> JASON</FIRST_NAME> 
          <LAST_NAME>ABATE</LAST_NAME> 
          <DOB>2/11/2013 12:01:36 PM</DOB> 
          <PHONE/> 
           </Data> 
          </TemplateData> 
       </Template>"; 

XDocument doc = XDocument.Parse(xml); 
IEnumerable<DatModel> datModels = 
    doc.Descendants("Data").Select(d => new DatModel 
    { 
     Active = (string) d.Element("ACTIVE"), 
     FirstName = (string) d.Element("FIRST_NAME"), 
     LastName = (string)d.Element("LAST_NAME"), 
     Dob = (DateTime) d.Element("DOB"), 
     Phone = (string)d.Element("PHONE"), 
    });