好的,所以我有一个几乎看起来像这样的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 Elements:
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 to 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”的集合,其中每个“to”都可以是“type”值。
我非常感谢任何帮助,过去3天我在XML方面的工作量比过去3年多得多,而且并不多。
非常感谢您的帮助。
答案 0 :(得分: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()
};