如何删除重复或不显示XML文档中的重复值 [英] How to delete repeated or dont display repeated values in XML document

查看:206
本文介绍了如何删除重复或不显示XML文档中的重复值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题是我创建了一个winform应用程序,该应用程序可以将数据表中的数据添加到xml文档中,还可以进行更新,删除.但我使用readxml()和writexml()从xml读取数据并将数据写入xml,但是一旦在xml文档中添加了一行,那么如果我再次想添加一行,则该行将与数据一起添加像重复整个数据表一样的数据,如果我删除了一行就打开了应用程序,那么xml文档变得错误并且异常来了,请帮助我

我尝试过的事情:

the problem is i created a winform application that can add data from datatable to xml document and also update, delete. but iam using readxml() and writexml() to read the data from xml and write the data to xml but once if added one row in xml document then if i again wanted to add one row the row is adding with the data and also previous data like repeating the whole datatable and when i opened the application if i deleted one row the xml document becoming error and exceptions are coming plz help me

What I have tried:

private void Form1_Load(object sender, EventArgs e)
{
    dtable.Columns.Add("NAME");
    dtable.Columns.Add("DESIGNATION");
    dtable.Columns.Add("COMPANY");
    dgvxml.DataSource = dtable;
    ds.ReadXml(str);
    ds.WriteXml(str);
    dgvxml.DataSource = ds.Tables[0];
}

private void btnadd_Click(object sender, EventArgs e)
{
    dtable.TableName = "PARTICIPANTS";

    if (a <= 0)
    {
        dtable.ReadXml(str);
        a++;
    }

    DataRow drow = dtable.NewRow();
    drow["NAME"] = txtname.Text;
    drow["DESIGNATION"] = txtdesig.Text;
    drow["COMPANY"] = txtcomp.Text;
    dtable.Rows.Add(drow);
    dgvxml.DataSource = dtable;
    dtable.WriteXml(str);

    txtname.Text = "";
    txtdesig.Text = "";
    txtcomp.Text = "";
    label4.Text = "";
    timer1.Start();
}

private void btndel_Click(object sender, EventArgs e)
{
    try
    {
        if (txtname.Text == "" || txtcomp.Text == "" || txtcomp.Text == "")
        {
            label4.Text = "Select one row";
        }
        else
        {
            int rowindex = dgvxml.CurrentCell.RowIndex;
            dgvxml.Rows.RemoveAt(rowindex);

            dtable.WriteXml(str);

            txtname.Text = "";
            txtdesig.Text = "";
            txtcomp.Text = "";
            label4.Text = "";
            btnadd.Visible = true;
        }
    }
    catch (Exception)
    {

        label4.Text = "Change the Xml file name and proceed";
    }
}

推荐答案




下面是帮助您解决问题的完整示例.在此示例中,我只使用了一列.

Hi,


Below, a complete example to help your problem. I used one column in this example.

using System.IO;
using System.Xml;

......

DataSet ds = new System.Data.DataSet();
string str = @"C:\your_path\PARTICIPANTS.xml";

private void btn_delete_Click(object sender, EventArgs e)
{
    ds.Tables["PARTICIPANTS"].Rows[this.dgvxml.CurrentCell.RowIndex].Delete();
    ds.Tables["PARTICIPANTS"].AcceptChanges();
    this.Write_Xml();
}

private void Open_Xml()
{
     //create struct and add table in the dataset
     DataTable dtable = new System.Data.DataTable("PARTICIPANTS");
     dtable.Columns.Add("NAME");
     ds.Merge(dtable);

     //verify if the xml file exist
     if (File.Exists(str))
     {
                //open xml into dataset
                using (Stream stream_xml = new FileStream(str, FileMode.Open, FileAccess.Read))
                {
                    ds.Tables["PARTICIPANTS"].ReadXml(stream_xml);
                }
     }
     else
     { 
                //write new xml document in machine 
                this.Write_Xml();
     }
     dgvxml.DataSource = ds.Tables["PARTICIPANTS"];
}

private void Write_Xml()
{
     XmlTextWriter stwxml = new XmlTextWriter(str, System.Text.Encoding.UTF8);
     ds.Tables["PARTICIPANTS"].WriteXml(stwxml, XmlWriteMode.IgnoreSchema, false);
     stwxml.Close();  
}

private void Form3_Load(object sender, EventArgs e)
{
     //open xml
      this.Open_Xml();            
}

private void btn_add_Click(object sender, EventArgs e)
{
     //add line
      DataRow drow = ds.Tables["PARTICIPANTS"].NewRow();
      drow["NAME"] = txt_name.Text;
      ds.Tables["PARTICIPANTS"].Rows.Add(drow);
      dgvxml.DataSource = ds.Tables["PARTICIPANTS"];

      //write xml
      this.Write_Xml();
}

private void dgvxml_CellClick(object sender, DataGridViewCellEventArgs e)
{
     this.txt_name.Text = ds.Tables["PARTICIPANTS"].Rows[e.RowIndex]["NAME"].ToString();
}


这篇关于如何删除重复或不显示XML文档中的重复值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆