2013-02-14 255 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"), 
    });