简单的绿色执着 2021-03-18 10:37 采纳率: 0%
浏览 75

读取XML文件根级别上的数据无效

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace LINQ操作XML
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            //15.10 
            //1.定义两个字符串类型的全局变量
            //2.记录XML文件路径   记录选中的ID编号

            InitializeComponent();
           

        }
        //记录XML文件路径
        static string s1 = @"C:\Users\Administrator\Desktop\a.xml";
        //记录选中的ID编号
        static string s2 = "";

        /// <summary>
        /// 加载XML文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            getXmLInfo();
        }

        #region 将XML文件中的内容绑定到dataGridView控件
        /// <summary>
        /// 将XML文件中的内容绑定到dataGridView控件
        /// </summary>
        private void getXmLInfo()
        {
            DataSet ds = new DataSet();
            ds.ReadXmlSchema(s1);
            //读取XML结构
            ds.ReadXml(s1);
            //在dataGridView中显示XML文件中的信息
            dataGridView1.DataSource = ds.Tables[0];
        }
        #endregion

        /// <summary>
        /// 使用LINQ to XML技术向指定的xml文件中插入用户输入的数据,并重新保存XML文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //加载XML文件
            XElement xe = XElement.Load(s1);
            //创建IEnumerable泛型接口
            IEnumerable<XElement> elements = from info in xe.Elements("People")
                                             select info;
            //生成新的编号
            string str = (Convert.ToInt32(elements.Max(info => info.Attribute("ID").Value)) + 1).ToString("000");
            //创建xml元素
            XElement people = new XElement( 
                "People",new XAttribute("ID",str),                  //为XML元素设置属性
                new XElement("Name",textBox1.Text),
                new XElement("Sex",comboBox1.Text),
                new XElement("Salary",textBox2.Text)
                );
            //添加XML元素
            xe.Add(people);
            //保存XML元素到XML文件
            xe.Save(s1);
            getXmLInfo();
        }

        /// <summary>
        /// 查找选中记录的详细信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //记录选中的ID编号
            s2 = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
            //加载XML文档
            XElement xe =XElement.Load(s1);
            //根据编号查找信息
            IEnumerable<XElement> elements = from info in xe.Elements("People")
                                             where info.Attribute("ID").Value == s2
                                             select info;
            //遍历查找到的所有信息
            foreach (var item in elements)
            {

                textBox1.Text = item.Element("Name").Value;
                comboBox1.Text = item.Element("Sex").Value;
                textBox2.Text = item.Element("Salary").Value;

            }



        }

        /// <summary>
        /// 修改XML文件指定记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (s2!="")         //判断是否选择了编号
            {
                //加载XML文件
                XElement xe = XElement.Load(s1);
                //根据编号查找信息
                IEnumerable<XElement> elements = from info in xe.Elements("People")
                                                 where info.Attribute("ID").Value == s2
                                                 select info;
                //判断是否找到了信息
                if(elements.Count()>0)
                {
                    //获取找到的第一条记录
                    XElement Xe1 = elements.First();
                    //为XML元素设置属性值
                    Xe1.SetAttributeValue("ID", s2);
                    //替换XML元素中的值
                    Xe1.ReplaceNodes(
                        new XElement("Name",textBox1.Text),
                        new XElement("Sex",comboBox1.Text),
                        new XElement("Salary",textBox2.Text)
                        );
                    //保存XML元素到XML文件
                    xe.Save(s1);

                }
                getXmLInfo();
            }
        }

        /// <summary>
        /// 删除的记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (s2!="")
            {
                XElement xe = XElement.Load(s1);
                //根据编号查找信息
                IEnumerable<XElement> elements = from info in xe.Elements("People")
                                                 where info.Attribute("ID").Value == s2
                                                 select info;
                if (elements.Count()>0)
                {
                    elements.First().Remove();
                    xe.Save(s1);
                }
                getXmLInfo();
            }
        }
}

位置出错在于

不知道怎么解决,有没有大佬告诉:

  • 写回答

1条回答 默认 最新

  • cdxy2005 2021-03-18 11:01
    关注

    有没有可能是源文件格式的问题呢?可以检查下文件格式

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器