Convert string to variable name

前端 未结 5 481
逝去的感伤
逝去的感伤 2020-12-20 16:53

I have an XML file, I have a node and I read all ChildNodes. The name of the childNode match to a variable I have to set with the value of this childNode.

In the loo

相关标签:
5条回答
  • 2020-12-20 17:19

    You could either do as "Default" said, or you could look into Reflection. By using the Type.GetMember(string) method you could find a member with the given name (the tag name in your XML) and set its value.

    EDIT
    Samich beat me, so I'll give him +1 - he's got sample code as well.

    0 讨论(0)
  • 2020-12-20 17:25

    If you put the names and values in a dictionary, you can easily get the values by name:

    Dictionary<string, string> parameters =
      xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes
      .ToDictionary(n => n.Name, n => n.InnerText);
    
    myvar1 = parameters["myvar1"];
    myvar2 = parameters["myvar2"];
    
    0 讨论(0)
  • 2020-12-20 17:27

    If you are seeking to assign variables based on the names of nodes in XML, you have at least a couple options:

    • Deserialize the XML structure into an object with corresponding member names
    • Populate the variables using reflection
    • Populate the variables using dynamic method calls/expression trees that know how to read the contents of the XML node into an object property.

    All of these approaches suggest a more object-oriented approach to the problem then just populating a few variables, but it would be easy to create a lightweight structure with the appropriate members which is populated by reading the XML document.

    You could also use a key-based collection (like a Dictionary<string, string>) to store the values if you are just looking to build a simple name/value collection from the source XML.

    0 讨论(0)
  • 2020-12-20 17:33

    You can do it using Reflection:

    var type = typeof(SomeClass);
    var field = type.GetField(item.Name);
    field.SetValue(null, item.InnerText);
    

    RE: UPDATE 1

    var parameters = new ParametersTest();
    var type = parameters.GetType();
    
    var s = @"<parameters>
                <MyVar1>MyValue1</MyVar1>
                <MyVar2>MyValue2</MyVar2>
               </parameters>";
    
    var xmlParamInstallation = new XmlDocument();
    xmlParamInstallation.LoadXml(s);
    
    foreach (XmlNode item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes)
    {
    
        var field = type.GetProperty(item.LocalName);
        field.SetValue(parameters, item.InnerText, null);
    }
    
    0 讨论(0)
  • 2020-12-20 17:39

    You can check out the XmlSerializer class

    0 讨论(0)
提交回复
热议问题