繁体   English   中英

从 XML 文件 C# 获取层次结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM