2010-10-12 69 views
1

好了,我有一個XML文件,它幾乎看起來像這樣:填充類XML

<Templates> 
    <Template> 
     <TemplateID>00X500000011iTSEAY</TemplateID> 
     <To> 
      <To type='User'>00550000000mfOU</To> 
      <To type='User'>00550000000mb3pAAA</To> 
      <To type='Group'>00G50000001PiHz</To> 
      <To type='AccountTeam'>AccountExecutive</To> 
     </To> 
     <CC> 
      <CC type='AccountTeam'>SalesLead</CC> 
     </CC> 
     <BCC> 
      <BCC type='SalesTeam'>SalesManager</BCC> 
     </BCC> 
    </Template> 
</Templates> 

就這樣,我想要做的就是填充一些類,可以使那種感覺。所以我首先想到的就是To元素:

public class EmailRecipient 
{ 
    public ToRecipient To {get;set;} 
    public CCRecipient CC {get;set;} 
} 

public class ToRecipient 
{ 
    public string Key {get;set;} 
    public string Type {get;set;} 
} 

不完全優雅,但這是我的草稿。我試圖使用Linq來XML,因爲我知道我有什麼TemplateId,然後我可以用這些值填充類。下面是我在哪裏...並停留在該測試程序:

var results = from x in xmlDoc.Descendants(XName.Get("Template") 
         where x.Element(XName.Get("TemplateID")).Value == "00X500000011iTSEAY" 
         select new EmailRecipient() 
         { 
          ToRecipient = 
         }; 

與所有的這樣說,我希望得到「TOS」的集合,其中每個「到」可以了「類型「值。

任何幫助將不勝感激,在過去的3天裏,我在XML方面的貢獻超過了過去3年,而且這並不多。

非常感謝您的幫助。

回答

1

由於每個EmailRecipient實例有多個ToRecipient,因此To屬性的類型將需要是集合類型。如果你讓一個IEnumerable:

public class EmailRecipient 
    { 
     public IEnumerable<ToRecipient> To { get; set; } 

    } 

那麼這個LINQ查詢應該做的伎倆:

var results = from x in xmlDoc.Descendants(XName.Get("Template")) 
       where x.Element(XName.Get("TemplateID")).Value == "00X500000011iTSEAY" 
       select new EmailRecipient() 
       { 
        To = (from to in x.Element("To").Elements("To") 
         select new ToRecipient { Key = to.Value, Type = to.Attribute("type").Value}).ToList() 
       }; 
+0

謝謝,這是子查詢(或一個的可能性),這是讓我。乾杯! – BryanGrimes 2010-10-12 17:56:30