我有一个XML文件,我有一个节点,我读了所有ChildNodes。 childNode的名称与我必须使用此childNode的值设置的变量匹配。
在循环中,我想设置:
C#代码:
protected string myvar1;
protected string myvar2;
XML内容如下所示:
<parameters>
<myvar1>MyValue1</myvar1>
<myvar2>MyValue2</myvar2>
</parameters>
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);
}
答案 0 :(得分:7)
您可以使用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 = @"<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);
}
答案 1 :(得分:5)
如果您要根据XML中的节点名称分配变量,则至少有两个选项:
所有这些方法都提出了一种更加面向对象的方法,然后只填充一些变量,但是使用适当的成员创建一个轻量级结构很容易,这些成员通过读取XML文档来填充。
如果您只是想从源XML构建一个简单的名称/值集合,您还可以使用基于键的集合(如Dictionary<string, string>
)来存储值。
答案 2 :(得分:3)
如果将名称和值放在字典中,则可以通过名称轻松获取值:
Dictionary<string, string> parameters =
xmlParamInstallation.SelectNodes("parameters")[0].ChildNodes
.ToDictionary(n => n.Name, n => n.InnerText);
myvar1 = parameters["myvar1"];
myvar2 = parameters["myvar2"];
答案 3 :(得分:2)
你可以做“默认”说,或者你可以看看反思。通过使用Type.GetMember(string)
方法,您可以找到具有给定名称的成员(XML中的标记名称)并设置其值。
修改强>
Samich打败了我,所以我会给他+1 - 他也有示例代码。
答案 4 :(得分:1)
您可以查看XmlSerializer课程