2012-06-22 57 views
-3

与我在这里可以找到的不同,我用魔杖来维护XML文档中的语法,并且序列化没有涉及到这一点。我希望能够向xml文档添加另一个“任务”标签......加载信息不是问题,我必须先处理这个问题......但是这是。将Xml保存到文档C#

主要课程:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml; 
using System.Xml.Linq; 
using System.Xml.Serialization; 
using System.IO; 

namespace ToDoList 
{ 
    public partial class Form1 : Form 
    { 
     string title; //the variable for the title textbox value to be stored in 
     string details; //the variable for the details textbox value to be stored in 
     string itemstr; //the variable for title and details to be merged in 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void Form1_Load(object sender, EventArgs e) 
     { 
      optionsbtn.Text = "Options"; //make the options button's text options 
      var items = ToDochkbox.Items; //create a private "var" items symbolizing    the Checkbox's items array 
      XDocument xmlDoc = XDocument.Load("tasksdoc.xml"); //load the xml document   (in bin or release) 
      var q = from c in xmlDoc.Descendants("root") //go "within" the <root>  </root> tag in the file 
        select (string)c.Element("task"); //find the first <task></task> tag 
      foreach (string N in q) //now cycle through all the <task></task> tags and  per cycle save them to string "N" 
      { 
       items.Add(N); //add the item to the checkbox list 
      } 


     } 

     public void addbtn_Click(object sender, EventArgs e) 
     { 
      var items = ToDochkbox.Items; //create a private "var" items symbolizing  the Checkbox's items array 
      title = Addtb.Text; //set the title string to equal the title textbox's  contents 
      details = detailstb.Text; //set the details string to equal the detail  textbox's contents 
      itemstr = title +" - " + details; //set a variable to equal the title string, a - with spaces on each end, and then the details string 
      items.Add(itemstr); //add the variable itemstr (above) to the the checkbox list 

     } 

    private void optionsbtn_Click(object sender, EventArgs e) 
    { 
     new options().Show();//show the options form 
    } 
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     new options().Show();//show the options form 
    } 

    private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

    } 

    public void loadToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     optionsbtn.Text = "Options"; //make the options button's text options 
     var items = ToDochkbox.Items; //create a private "var" items symbolizing the Checkbox's items array 
     XDocument xmlDoc = XDocument.Load("tasksdoc.xml"); //load the xml document (in bin or release) 
     var q = from c in xmlDoc.Descendants("root") //go "within" the <root> </root> tag in the file 
       select (string)c.Element("task"); //find the first <task></task> tag 
     foreach (string N in q) //now cycle through all the <task></task> tags and per       cycle save them to string "N" 
      { 
       items.Add(N); //add the item to the checkbox list 
      } 


     } 


    } 
} 

和我的XML文档:

<root> 
     <task>First Task - Create a Task</task> 
    </root> 
+1

那么问题是什么? –

+1

什么是“在我的xml文档中维护语法的魔杖”是什么意思,以及为什么你认为“序列化不会触及那个”? –

+1

请参阅“[堆栈溢出不允许在标题中使用标记](http://meta.stackexchange.com/a/130208)” –

回答

0

,你可以使用序列化类:

public class MyClass 
{ 
    [XmlElement("task")] 
    public List<string> Tasks { get; set; } 
} 

上集合类型放置XmlElementAttribute会导致每个元素被序列化而不被放置到列表的节点。

的Xml与XmlElementAttribute

<root> 
    <task>First Task - Create a Task</task> 
    <task>SecondTask - Create a Task</task> 
    <task>ThirdTask - Create a Task</task> 
</root> 

的Xml 没有XmlElementAttribute

<root> 
    <Tasks> 
     <Task>First Task - Create a Task</Task> 
     <Task>SecondTask - Create a Task</Task> 
     <Task>ThirdTask - Create a Task</Task> 
    </Tasks> 
</root> 

我回答another question约几天前以类似的方式序列化列表。看看他的问题,然后回答,这可能是你想要做的。

+0

我该如何使用这个类或什么?比如,公共列表中的“任务”列表任务{get;组; }需要做...我真的很困惑 – SubConcussive