从winform项目构建xml

时间:2014-02-09 15:04:52

标签: c# xml winforms

我想从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]))));

但对我来说这似乎太复杂了,我想知道是否还有另一种方式

1 个答案:

答案 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);
}