将textbox1条目保存到xml中

时间:2015-09-24 13:53:45

标签: c# .net xml

这是我的代码:

String CREATE_TABLE = "CREATE TABLE " + GROUP_CHAT_MESSAGE_TABLE_NAME + "("
                + ID + " INTEGER PRIMARY KEY," 
                + NAME + " TEXT,"
                + SURNAME + " TEXT ,"                                   
                + MARKS + " INTEGER" + ")";

db.execSQL(CREATE_TABLE);

这是我的按钮;

 static void main(string[] args)
    {
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load("data.XML");
        XmlNodeList userNodes = xmldoc.SelectNodes("data.XML");
        foreach (XmlNode userNode in userNodes) ;

    }

    private string id;
    private string APIkey;
    private string VCode;

    public string ID
    {
         get { return id; }
         set { id = Guid.NewGuid().ToString(); }
    }

    public string APIKEY
    {
        get { return APIkey; }
        set { APIkey = value; }
    }

    public string VCODE
    {
        get { return VCode; }
        set { VCode = value; }

    }

    public static void SaveData(object obj, string Filename)
    {

        XmlSerializer sr = new XmlSerializer(obj.GetType());
        TextWriter writer = new StreamWriter(Filename, true);
        sr.Serialize(writer, obj);
        writer.Close();

    }
}

好的我想要做的是添加我在文本框中键入的内容以进入XML文件但是当我再次执行时它会将它添加到XML而不会覆盖它。

我一直在谷歌搜索一段时间并阅读大量的内容,这只是没有任何意义,我已经尝试过了。我现在要求一个善良的灵魂,请用婴儿语言向我解释这一切都是错的。

编辑

XML OUTPUT;

    private void button1_Click(object sender, EventArgs e)
   {
    {
       try
    {


        APISAVE info = new APISAVE();
        info.APIKEY = txtAPI.Text;
        info.VCODE = txtVerC.Text;
        info.ID = info.ID;
        APISAVE.SaveData(info, "data.XML");

    }

    catch (Exception ex)

    {
        MessageBox.Show(ex.Message);
    }
}

另一个编辑:

<?xml version="1.0" encoding="utf-8"?>
<Serialization xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>91bb44be-d55e-40f6-83f7-8fb43d0a7321</ID>
<APIKEY>12</APIKEY>
<VCODE>12</VCODE>
</Serialization><?xml version="1.0" encoding="utf-8"?>
<Serialization xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>c2a45a36-e7c8-4ac5-a37c-87c452db5807</ID>
<APIKEY>123</APIKEY>
<VCODE>123</VCODE>
 </Serialization>

}

2 个答案:

答案 0 :(得分:0)

这是我的完整代码,这有效:

namespace WinForms_CSharp
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public  List<APISAVE> list = null;
        private void Form2_Load(object sender, EventArgs e)
        {
            list = new List<APISAVE>();
            if (File.Exists(Application.StartupPath + "\\data.xml"))
            {
                var doc = XDocument.Load("data.XML");

                foreach (XElement element in doc.Descendants("APISAVE"))
                {
                    list.Add(new APISAVE() { ID = element.Element("ID").Value, APIKEY = element.Element("APIKEY").Value, VCODE = element.Element("VCODE").Value });
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                APISAVE info = new APISAVE();
                info.APIKEY = txtAPI.Text;
                info.VCODE = txtVerC.Text;
                info.ID = info.ID;
                list.Add(info);
                APISAVE.SaveData(list, "data.XML");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }       
    } // end of Form2 class

    public class APISAVE
    {
        private string id;
        private string APIkey;
        private string VCode;

        public string ID
        {
            get { return id; }
            set { id = Guid.NewGuid().ToString(); }
        }

        public string APIKEY
        {
            get { return APIkey; }
            set { APIkey = value; }
        }

        public string VCODE
        {
            get { return VCode; }
            set { VCode = value; }

        }

        public static void SaveData(List<APISAVE> list, string Filename)
        {
            File.Delete(Filename);
            XmlSerializer sr = new XmlSerializer(list.GetType());
            TextWriter writer = new StreamWriter(Filename, true);
            sr.Serialize(writer, list);
            writer.Close();
        }
    }
}

答案 1 :(得分:0)

最简单的方法是加载,反序列化,添加,序列化和写入文件。您可以加载XML,在内存中序列化并将序列化对象注入XML,但这不是那么简单,我会让您自己解决这个问题。

因此,您可以根据需要创建XML:

<RootObject>
    <NestedObject>
        <ID>1</ID>
        <VCODE>ABC123</VCODE>
        <APIKEY>xyz789</APIKEY>
    </NestedObject>
    <NestedObject>
        <ID>2</ID>
        <VCODE>ABC456</VCODE>
        <APIKEY>xyz456</APIKEY>
    </NestedObject>
</RootObject>

将其作为新类粘贴到Visual Studio中(编辑 - &gt;粘贴特殊 - &gt;粘贴XML作为类)并在您的(反)序列化代码中使用它们:

public RootObject LoadData(string filename)
{
    using (XmlSerializer sr = new XmlSerializer(typeof(RootObject)))
    {
        TextReader reader = new StreamReader(filename);
        return (RootObject)sr.Deserialize(writer, obj);
    }
}
public RootObject SaveData(string filename, RootObject objectToSerialize)
{
    using (XmlSerializer sr = new XmlSerializer(typeof(RootObject)))
    {
        TextWriter writer = new StreamWriter(filename);
        sr.Serialize(writer, objectToSerialize);
    }
}

然后您可以加载或创建,然后修改RootObject实例:

// Load or instantiate

string xmlFileName = "yourfilename.xml";    
RootObject rootObject;

if (File.Exists(xmlFileName))
{
    rootObject = LoadData(xmlFileName);
}
else
{
    rootObject = new RootObject
    {
        NestedObject = new RootObjectNestedObject[]         
    };
}

// Modify

var nestedObjects = new List<RootObjectNestedObject>(rootObject.NestedObject);

nestedObjects.Add(new RootObjectNestedObject
{
    ID = 42,
    VCODE = "foo",
    APIKEY = "bar"
});

// Save
rootObject.NestedObject = nestedObjects.ToArray();

SaveData(xmlFileName, rootObject);