以下のプログラムを書くためのより良い方法はありますか(私はそれができると確信していますが、どのように)
for (int i = 0; i < relevantElements.Count(); i++)
{
switch (len)
{
case 1: result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = null
,
EmailAddress = null
});
break;
case 2:
result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = GetElementValues(relevantElements[1], applicationType)
,
EmailAddress = null
});
break;
case 3:
result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = GetElementValues(relevantElements[1], applicationType)
,
EmailAddress = GetElementValues(relevantElements[2], applicationType)
});
break;
}
}
ありがとう
編集
ソースxmlファイルがあります
<?xml version="1.0" encoding="utf-8"?>
<RootElement>
<HomeSite>
<Context enabled="1" active="1">
<Culture>en-us</Culture>
<Affiliate>0</Affiliate>
<EmailAddress>sreetest@test.com</EmailAddress>
<Password>sreesree1</Password>
</Context>
</HomeSite>
<ResourceManager>
<Context enabled="1" active="1">
<Culture>en-us</Culture>
<Affiliate>0</Affiliate>
</Context>
</ResourceManager>
<Purchase>
<Context enabled="1" active="1">
<PurchaseUrl>http://purchase.mcafee.com?culture=en-us&affid=0</PurchaseUrl>
</Context>
<Context enabled="0" active="0">
<PurchaseUrl>http://purchase.mcafee.com?culture=en-gb&affid=0</PurchaseUrl>
</Context>
</Purchase>
</RootElement>
「HomeSite」アプリケーションタイプで理解できるように、「Context」要素の下には、Culture、Affiliate、EmailAddressの3つの要素があります。ただし、これは他のアプリケーションタイプ「ResourceManager」および「Purchase」から変更されています。私はまた、以下のようなカスタムエンティティを持っています
public class ContextElements
{
public string CultureName { get; set; }
public string AffId { get; set; }
public string EmailAddress { get; set; }
}
課題は、実行時にプロパティ値を入力する必要があることです。3を超えることはできません。
私の完全なプログラム(ただし、改善されたコードが必要です)
class Program
{
static void Main(string[] args)
{
XDocument xmlSkuDescDoc = null;
xmlSkuDescDoc = XDocument.Load(@"D:\Config.xml");
string applicationType = ApplicationType.Purchase.ToString();
var result = new List<ContextElements>();
var elementCollection = new List<string>();
(from data in xmlSkuDescDoc.Descendants(applicationType)
select data)
.Descendants("Context")
.Elements()
.ToList()
.ForEach(i => elementCollection.Add(i.Name.ToString()));
//Exclude unwanted elements
var relevantElements = elementCollection.Except(new List<string> { "Password" }).ToList();
int len = relevantElements.Count();
for (int i = 0; i < relevantElements.Count(); i++)
{
switch (len)
{
case 1: result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = null
,
EmailAddress = null
});
break;
case 2:
result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = GetElementValues(relevantElements[1], applicationType)
,
EmailAddress = null
});
break;
case 3:
result.Add(new ContextElements
{
CultureName = GetElementValues(relevantElements[0], applicationType)
,
AffId = GetElementValues(relevantElements[1], applicationType)
,
EmailAddress = GetElementValues(relevantElements[2], applicationType)
});
break;
}
}
// //just for printing
result.ForEach(i => Console.WriteLine(string.Format("CultureName = {0} , AffId = {1} , EmailAddress = {2} ", i.CultureName, i.AffId, i.EmailAddress)));
Console.ReadKey();
}
private static string GetElementValues(string elementName,string applicationType)
{
XDocument xmlSkuDescDoc = null;
xmlSkuDescDoc = XDocument.Load(@"D:\Config.xml");
return (from data in
(from data in xmlSkuDescDoc.Descendants(applicationType)
select data).Descendants("Context")
select new { Value = (string)data.Element(elementName)}).FirstOrDefault().ToString();
}
public enum ApplicationType
{
HomeSite = 1
,
ResourceManager
,
ApplicationProvisioning
,
Purchase
,
GAC
, WebSVCService
}
}