我想从winform内容中填写xml文档 例如,如果我的winform看起来像:
个人资料: a
姓名: abcd
年龄: 40
国家:中国
虽然个人资料,姓名,年龄,国家是标签,而a,abcd,40,但瓷器是文本框。
xml应如下所示:
<profiles>
<profile name="a">
<name>abcd</name>
<age>40</age>
<country>china</country>
</profile>
...
</profiles>
我事先并不知道我将拥有什么标签/文本框,所以它应该来自winform。
我开始做的事情如下:
List<string> data= new List<string>();
foreach (Control tb in tabPage2.Controls)
{
if (tb.GetType() == typeof(TextBox))
data.Add(tb.Text);
}
读取一个列表中的每个文本框值,另一个列表中的每个标签值,然后将其组合到字典中,其中键是标签值,值是标签值。
然后取出字典,并将其插入xml doc:
String[] allKeys = null;
allKeys = new String[data.Count];
xmlDocs.Root.Add(
new XElement("Profile", new XAttribute("Name", tbProfile.Text),
allKeys.Select(x => new XElement(x, dictionary[x]))));
但对我来说这似乎太复杂了,我想知道是否还有另一种方式
答案 0 :(得分:3)
如果你创建一个类,那会更容易。例如:
[Serializable]
public class Profile
{
[XmlAttribute("name")]
public string NameAttribute { get; set; }
[XmlElement]
public string Name { get; set; }
[XmlElement]
public int Age { get; set; }
[XmlElement]
public string Country { get; set; }
}
然后在代码的顶部定义Profile
列表(在课程级别,方法之外)
List<Profile> profiles = new List<Profile>();
如果要添加新的Profile
,例如在按钮点击中,请创建一个新的Profile
实例并将其添加到列表中:
private void btnAdd_Click(object sender, EventArgs e)
{
profiles.Add(new Profile
{
NameAttribute = txtProfile.Text,
Name = txtName.Text,
Age = Convert.ToInt32(txtAge.Text),
Country = txtCountry.Text
});
}
然后,当您要将所有个人资料保存到XML
时使用XmlSerializer
:
private void btnSave_Click(object sender, EventArgs e)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Profile>),new XmlRootAttribute("Profiles"));
var fs = new FileStream("profiles.xml", FileMode.OpenOrCreate, FileAccess.Write);
serializer.Serialize(fs,profiles);
}