• XML





    五章    XML(extensible markup language)


    1节
    xml文件读取和写入----------------------------------------------------------------------(*)

    xml:标记语言(文档中不想要打印输出的内容),存储数据,其标签几乎是没有什么定义的(只有一个文件头)
    Html:也是标记语言,侧重展示数据,其标签几乎都是已经定义过了的(预定义)
    xml语法特点:
    1 严格区分大小写
    2 有且只有一个根节点
    3 有开始和结束标签
    4 属性必须使用'"'
    5 没有预定义标签,与html不一样
    6 文档声明: <?xml verslon="1.0" encoding="utf-8"?>    //verslon="1.0" 版本
    7 注释:<!-->
    8 CDATA:即原意文本-<![CDATA[...]]>
    9 注意编码问题,文本文件实际编码要与文档声明中编码一致

    //.xml
    <?xml version="1.0" encoding="utf-8"?>
    <class>
        <student id="101">
            <name>yangguo</name>
            <gender>male</gender> //中文报错
        </student>
    </class>

    XML基础
    优点:易读,格式化标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎的编写
    XML就是用一种格式化的方式来存储数据,并且是文本文件,任何时候我们都能很容易的用记事本打开。与Excel,Word不一样
    //例子:.net中内置的配置文件app.config web.config都是xml文件;Office2007的文件格式docx xlsx pptx都是xml,先改写成rar文件再解压
    xml编写完成后可以用浏览器打开,如果写错了,浏览器会提示,如果明明没错,浏览器还是提示错误,则可能是文件编码问题

    Linq To XML:读取写入
    //xml文件读取
                string path = "";
                XDocument xdoc = XDocument.Load("xstu2.xml");  //从文件创建新的xml实例
                XElement root = xdoc.Root; //获取xml文档xml树的根元素
                IEnumerable<XElement> xeles = root.Elements();   //根据这个根创建子元素,并返回集合
                //遍历这个子元素集合
                foreach(XElement xele in xeles)
                {
                    Console.WriteLine(xele.Name); //输出这个xml子元素的名称
                }
    //xml写入
                XDocument xdoc = new XDocument();//创建xml文档
                XElement root = new XElement("school");//创建一个学校根节点
                XElement classXele = new XElement("class");//创建一个班级子节点
                classXele.SetAttributeValue("id", "1101");//设置这个班级子节点属性id的值
                XElement stuXele = new XElement("student");//再创建一个学生子节点
                stuXele.SetAttributeValue("id", "1027402020");//设置学生子节点的id的值
                XElement nameXele = new XElement("name");//创建一个姓名子节点
                nameXele.SetValue("yangguo");//设置姓名子节点的值
                //把姓名节点加入学生节点
                stuXele.Add(nameXele);
                //把学生节点加入班级节点
                classXele.Add(stuXele);
                //把班级节点加入根节点
                root.Add(classXele);
                //保存根节点到指定路径中
                root.Save("xshool.xml");
                Console.WriteLine("ok,xml写入成功");


    //后面2个都是扩充

    //将集合序列化为xml文档
                XmlDocument xd = new XmlDocument();
                string XmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "lists1902.xml";
                using (StringWriter sw = new StringWriter())
                {
                    XmlSerializer xz = new XmlSerializer(list.GetType());//new 一个类,可以将指定类型的对象序列化为xml文档(需要把这个类型标记为可序列化)
                    xz.Serialize(sw, list);//将集合序列化为拼接字符串StringBuilder
                    Console.WriteLine(sw.ToString());
                    xd.LoadXml(sw.ToString());//把字符串加载到xml文档
                    xd.Save(XmlPath);//保存xml文档到指定路劲中
                    Console.WriteLine("写入文件成功!");
                    Console.ReadKey();
                }

            }
        }
        [Serializable]
        public class UserEntity
        {
            public int UserId;
            public string Name;
            public string Mobile;
            public string IDCardNo;
            public string OrderNo;
            public override string ToString()
            {
                return String.Format("序号:{0} 姓名:{1} 手机号: {2} 身份证:{3} 订单号:{4} ", UserId, Name, Mobile, IDCardNo, OrderNo);
            }
        }


    //将excel中文件导入xml
        using (Stream stream = new FileStream(@"C:UsersyangguoDesktop eexcel.xls", FileMode.Open, FileAccess.Read))
        {
            IWorkbook workbook = new HSSFWorkbook(stream);
            ISheet sheet = workbook.GetSheetAt(0);
            XmlDocument xd = new XmlDocument();
            XElement root = new XElement(sheet.SheetName);

            int k = 0;
            for (int i = 1; i <= sheet.LastRowNum; i++)
            {
                XElement UserEntityEle = new XElement("UserEntity");
                IRow row = sheet.GetRow(i);
                if(row.GetCell(4).NumericCellValue==1)//如果索引4的单元格值为1,就生成xml
                {
                    XElement UserId = new XElement("UserId");

                    UserId.SetValue(++k);
                    XElement Name = new XElement("Name");
                    Name.SetValue(row.GetCell(0).StringCellValue);
                    XElement Mobile = new XElement("Mobile");
                    Mobile.SetValue(row.GetCell(2).StringCellValue);
                    XElement IDCardNo = new XElement("IDCardNo");
                    IDCardNo.SetValue(row.GetCell(3).StringCellValue);
                    UserEntityEle.Add(UserId);
                    UserEntityEle.Add(Name);
                    UserEntityEle.Add(Mobile);
                    UserEntityEle.Add(IDCardNo);
                    root.Add(UserEntityEle);
                }
          
            }
            root.Save("last1.xml");
            Console.WriteLine("ok");
        }
        Console.ReadKey();



    2节


    //待读取xml文件
    //例子1
    <?xml version="1.0" encoding="utf-8"?>        //编码最好用"UTF-8"格式,因为vs识别不了"utf8"---------------------------(*)
    <CFX>
        <MSG>
            <交易码  val="1000"/>
            <流水号  val="100000000000001"/>
            <金额  val="1234567890.12"/>
            <付款机构  val="腾讯销售部"/>
            <付款单位账号  val="12345678901234567890"/>
            <收款机构  val="新浪财务部"/>
            <收款单位账号  val="12345678901234567890"/>
        </MSG>
        ...
    </CFX>
    //例子2
    <?xml version="1.0" encoding="UTF-8"?>
    <Users>
        <user id="001">
            <!--id的值,用户输入有可能有重复,这里不允许重复的,为了简单操作咋们就不判断了-->
            <name>admin</name>
            <password>admin123</password>
        </user>
        ...
    </Users>
    //在窗口加载时从XML文档中获得所有用户集合
                //获得xml文档的user节点集合
                XDocument xdoc = XDocument.Load("xdoc\xUsers.xml");
                //遍历每一个user节点
                foreach(XElement userXele in xdoc.Root.Elements())
                {
                    //把user节点的子节点转换为一个用户对象
                    User user = new User();
                    user.Id = Convert.ToInt32(userXele.Attribute("id").Value);
                    user.Name = userXele.Element("name").Value;
                    user.Password = userXele.Element("password").Value;
                    list.Add(user);
                }



    3节
    xml大项目读取

    <?xml version="1.0" encoding="gb2312"?>
    <class>
        <student id="001">
            <name>卡卡西</name>
            <gender>男</gender>
            <age>23</age>
        </student>
        ...
    </class>
    //设置列头 RowHeadersVisible=false
    //设置选择模式 FullRowSelect
    //创建一个学生类
    //读取xml文件,获取最低节点的学生集合
    //把集合绑定到dgvStudents
    //取消默认第一行选中 if(dgv.Rows.Count>0){dgv.SelectedRows[0].Selected=false;}



    4节
    xml大项目写入

    //GroupBox(新增)
    //获取用户输入内容
    //读取xml文件
    //创建元素,加入xml根节点
    //保存xml文件
    //刷新

    //删除:鼠标右键菜单ContextMenuStrip---添加右键菜单中的内容---dgv绑定到哪个右键菜单



    5节
    xml大项目删除

    //如果选中,获得id
                if(dgvStudents.SelectedRows.Count<=0)
                {
                    MessageBox.Show("请先选中要删除的行");
                    return;
                }
                string id = lbId.Text;
                //读取xml文件,获得根节点
                XDocument xdoc = XDocument.Load("xstu\xclass.xml");
                XElement root = xdoc.Root;
                //根据id就是根结点下的stu节点的id属性的值,查询并返回根节点下的stu节点
                XElement stu = root.Elements("student").Where(x => x.Attribute("id").Value == id).Single();-----------------------------------------------------------(*)
                //移除这个stu节点
                stu.Remove();
                //保存到xml文件
                root.Save("xstu\xclass.xml");
                //刷新
                LoadStudentsByXmlFile();



    6节
    xml大项目修改

    //当前是新开了一个GroupBox






  • 相关阅读:
    来电科技-自助租借充电宝
    一次使用NodeJS实现网页爬虫记
    八爪鱼采集器
    杭州市职称系统
    zz
    有道智选-网易效果推广
    Ubuntu10.04下载并编译Android4.3源代码
    poj 1654 Area 多边形面积
    Android利用Looper在子线程中改变UI
    Notepad 快捷键 大全
  • 原文地址:https://www.cnblogs.com/adolphyang/p/4739006.html
Copyright © 2020-2023  润新知