[英]Get Hierarchy from XML file C#
我有一个这样的xml结构:
<Plugin Name="Test">
<Configuration>
<Parameter Name="Dummy" Value="1">
<Parameter Name="Test11" Value="2"/>
<Parameter Name="Test12" Value="4"/>
<Parameter Name="Test12" Value="6"/>
</Parameter>
</Configuration>
</Plugin>
我有一个这样的配置类:
[Serializable]
public class PluginConfiguration
{
[XmlElement("Parameter")]
public virtual List<Parameter> Parameters { get; set; }
}
现在我想为我的 PluginConfiguration 类编写扩展方法,如下所示:
con.GetValue("Dummy");
这应该返回 1 并且
con.GetValue("Dummy/Test11");
这应该返回 2 和
con.GetValues("Dummy/Test12");
应该返回 [4,6] 的集合
这是我的代码:
public object GetValue(string arg1)
{
arg1 = "Dummy/Test11";
string[] splittedArg = arg1.Split('/');
if (splittedArg.Length == 0) return "";
string firstParamName = splittedArg[0];
string lastParamName = splittedArg[splittedArg.Length - 1];
foreach (Parameter param in pluginConfiguration.Parameters)
{
if (param.Name == firstParamName)
{
if (splittedArg.Length == 1)
{
return param.Value;
}
foreach (Parameter param1 in param.Parameters)
{
if (param1.Name == lastParamName)
{
return param1.Value;
}
}
}
}
return "";
}
public List<string> GetValue(string arg1)
{
if(string.IsNullOrEmpty(arg1))
return null;
arg1 = "Dummy/Test11";
var splittedArg = arg1.Split('/');
var firstParamName = splittedArg.FirstOrDefault();
var lastParamName = splittedArg.Count() > 1 ? splittedArg.LastOrDefault() : null;
var firstLevelParameters = pluginConfiguration.Parameters.Where(p=>p.Name == firstParamName);
var returnList = new List<string>();
foreach (Parameter param in firstLevelParameters)
{
if (lastParamName == null)
{
returnList.Add(param.Value);
}
else
{
foreach (var subParam in param.Parameters.Where(x=>x.Name == lastParamName))
{
returnList.Add(subParam.Value);
//probably would make more sense to add the first level value as well
//returnList.Add($"{param.Value}/{subParam.Value}");
//
//in your case this would be "1/2"
}
}
}
return returnList;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.