将字符串转换为变量名称
我有一个XML文件,我有一个节点,我读了所有ChildNodes。 childNode的名称与我必须使用此childNode的值设置的变量匹配。
在循环中,我想设置:
- myvar1到MyValue1
- myvar2到MyValue2
C#代码:
protected string myvar1; protected string myvar2;
XML内容如下所示:
MyValue1 MyValue2
C#设置变量:
foreach (var item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes) { ?????? }
任何的想法 ?
谢谢,
更新1:循环中的值“field”始终为null。
public class ParametersTest { public string myvar1 { get; set; } public string myvar2 {get; set;} } var type = typeof(ParametersTest); foreach (XmlNode item in xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes) { var field = type.GetField(item.LocalName); field.SetValue(field, item.InnerText); }
你可以使用Reflection做到这一点:
var type = typeof(SomeClass); var field = type.GetField(item.Name); field.SetValue(null, item.InnerText);
RE:更新1
var parameters = new ParametersTest(); var type = parameters.GetType(); var s = @" MyValue1 MyValue2 "; 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); }
如果您要根据XML中的节点名称分配变量,则至少有两个选项:
- 将XML结构反序列化为具有相应成员名称的对象
- 使用reflection填充变量
- 使用动态方法调用/表达式树填充变量,这些树知道如何将XML节点的内容读入对象属性。
所有这些方法都提出了一种更加面向对象的方法来解决问题,然后只填充一些变量,但是通过读取XML文档填充适当的成员来创建轻量级结构会很容易。
如果您只是想从源XML构建一个简单的名称/值集合,也可以使用基于键的集合(如Dictionary
)来存储值。
如果将名称和值放在字典中,则可以通过名称轻松获取值:
Dictionary parameters = xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes .ToDictionary(n => n.Name, n => n.InnerText); myvar1 = parameters["myvar1"]; myvar2 = parameters["myvar2"];
你可以做“默认”说,或者你可以看看反思。 通过使用Type.GetMember(string)
方法,您可以找到具有给定名称的成员(XML中的标记名称)并设置其值。
编辑
Samich打败了我,所以我会给他+1 – 他也有示例代码。
您可以查看XmlSerializer类