栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Windows程序设计】XML文件

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Windows程序设计】XML文件

前言

本次实验是我和小组成员在Windows程序设计课程上负责,并需要上台跟同学们讲解演示的,除了展示设计的程序对XML文件进行的操作外,还需要首先了解XML文件,给同学们介绍XML文件

XML文件

XML(Extensible Markup Language)称为可扩展标记语言,和HTML一样,都是标准通用标记语言。XML的应用场合非常多,在应用程序中它可被作为配置文件,在json中用来传递对象,复杂的SOAP网络通信协议是基于XML格式的,它还应用到了数据存储领城,XML文件也类似于数据库,提供数据的结构化视图。


1.XML文档和HTML

XML文档是纯文本文件,几乎所有程序语言都支持文本文件的处理,只要遵循统一的目的,XML文件可以实现跨操作系统平台,与编程语言无关。
网页语言HTML称为静态网页是一种标记语言,通过事先定义的不同文本标签作为网页内容的说明,HTML语言的标签所代表的意义是固定不变的,它的标签数量固定,每种标签预定义了内容的显示格式,各种浏览器显示网页的结果也几近相同。重在数据的显示模式,部分HTML标签没有关闭标签。
XML文件吸收了HTMI语言中使用标签来定义内容的方式,XML也是一种标记语言,但XML仅规定最基本的文件结构语法,它的主要目的是以结构化的方式来表示数据,XML 没有对标签进行预定义.标签及其内容统统属于用户自定义,也就是说标签的意义由用户自由定义,也称作自我描述性,并且由用户自定义和解析.XML.扩展性比HTML强,还有XML元素都须有关闭标签。

2.XML文档的树结构

学习XML印象最深的是它的树结构,XML文档对象模型(DOM)类是XML文档在内存中的表示形式,编辑是DOM的主要功能,实际上XML数据在文件中时嚯从另一个对象传入时用线性方式存储,读入内存后,采用的是结构化表示方法——在笔者看来它结构化的内存构造也就是树结构

我认为这是XML文档最鲜明的特点

XML文档必须包含根元素,是所有其他元素的父元素

元素共同形成了一颗文档树,从根开始一层一层往下,直到扩展到树的最低端

以下文的XML文档内容为例:



  
    Carson
    31.95
    05/01/2001
  
  
    MSPress
    WA
  

book.xml的DOM对象模型如下:


第一行是XML说明,可以看出根元素就是文档内容的最外层,其下套有两个元素,每个元素分别有自己的元素内容,当书写一个元素结束,在结尾加上

 3.操作XML文件的类

同样也是在VS上创建WIindows窗体程序设计(基于.net平台)的项目,.net平台提供了操作XML文件的类:

XmlReader类用于读入XML文档,它也可用于创建XML文档;

XmlWriter类用于向XML文档内写入内容;

XmlNode类用于XML结点的操作

Xmldocument类(扩展XmlNode)支持用于对整个文档执行操作(例如,将文档加载到内存中或将XML保存到文件中)的DOM方法,Xmldocument表示整个XML文档中的内存对象,操作XML必须要先创建这个对象

4.使用DOM操作XML文档

主要介绍操作XML文档的DOM方法,窗体设计如下

1.创建XML文件

在窗体上放置textBox控件设为多行文本,treeView控件以及按钮,在创建XML文件按钮事件加入代码,用于生成一个XML文档,并保存为bookstore.xml

//创建一个XML文档
            Xmldocument xmlDoc = new Xmldocument();
            xmlDoc.LoadXml("");
            //创建XML版本声明
            XmlDeclaration xmldec1;
            xmldec1 = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
            //根节点
            XmlNode root = xmlDoc.documentElement;
            xmlDoc.InsertBefore(xmldec1, root);
            //创建一个结点
            XmlElement xe1 = xmlDoc.CreateElement("book");
            //设置该结点genre属性
            xe1.SetAttribute("genre", "黄敏");
            //设置该结点ISBN属性
            xe1.SetAttribute("ISBN", "2-3631-4");
            XmlElement xesub1 = xmlDoc.CreateElement("title");
            xesub1.InnerText = "CS从入门到精通";     //设置文本结点
            xe1.AppendChild(xesub1);
            XmlElement xesub2 = xmlDoc.CreateElement("author");
            xesub2.InnerText = "侯捷";
            xe1.AppendChild(xesub2);
            XmlElement xesub3 = xmlDoc.CreateElement("price");
            xesub3.InnerText = "58.3";
            xe1.AppendChild(xesub3);
            root.AppendChild(xe1);
            xmlDoc.Save("bookstore.xml");

在创建XML文档时,使用了Xmldocument类的documentElement成员,它代表文档的根结点;

XmlDeclaration类代表XML文档的版本声明部分,通过Xmldocument类的InsertBefore方法,将声明插入到根结点前;

Xmldocument类的CreateElement用于创建一个普通的XmlElement结点对象,使用XmlElement的AppendChild方法添加结点的子结点对象;

最后使用Xmldocument类的Save方法将生成的XML文档给定的文件名进行保存

2.显示XML文本内容

放入一个openFileDialog控件,用户单击按钮后,将XML文本内容显示在文本框中,文档名记录在全局变量中

openFileDialog1.InitialDirectory = Directory.GetCurrentDirectory();
            openFileDialog1.Filter = "XML文档|*.xml";
            StreamReader sr = null;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                xml_fileName = openFileDialog1.FileName;
                sr = new StreamReader(xml_fileName);
                textBox1.Text = sr.ReadToEnd();
                sr.Close();
            }
3.显示XML结点的DOM树结构

XML文档的结点元素在DOM中构成了一棵树,这里用TreeView

Xmldocument doc = new Xmldocument();
            if (File.Exists(xml_filename))
            {
                doc.Load(xml_filename);
                treeView1.Nodes.Clear();
                XmlNode root = doc.documentElement;
                TreeNode node;
                node = treeView1.Nodes.Add("XML文档");
                build_tree(root, node);
                treeView1.ExpandAll();
            }
4.查找与修改结点
Xmldocument xmlDoc = new Xmldocument();
            xmlDoc.Load("bookstore.xml");
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;
            //获取bookstore结点的所有子节点
            //遍历所有子结点
            foreach (XmlNode xn in nodeList)
            {
                //将子结点类型转换为XmlElement类型
                XmlElement xe = (XmlElement)xn;
                //如果 genre 属性值为黄敏
                if (xe.GetAttribute("genre") == "黄敏")
                {
                    //则修改该属性为“update黄敏”
                    xe.SetAttribute("genre", "update 黄敏");
                    //继续获取 xe 子结点的所有子结点
                    XmlNodeList nls = xe.ChildNodes;
                    foreach (XmlNode xnl in nls)     //遍历
                    {
                        XmlElement xe2 = (XmlElement)xnl;     //转换类型
                                                              //找到结点名称
                        if (xe2.Name == "author")
                        {
                            xe2.InnerText = "亚胜";
                            break;     //找到了就退出来
                        }
                    }
                    break;
                }
            }
            xmlDoc.Save("bookstore.xml");      //保存
5.使用Schema验证XML文件
XmlSchemaSet sc = new XmlSchemaSet();
            sc.Add("urn:bookstore-schema", "books.xsd");
            XmlReaderSettings settings = new XmlReaderSettings();
            // ConformanceLevel = ConformanceLevel.document
            settings.ValidationType = ValidationType.Schema;
            settings.Schemas = sc;
            settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
            XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);
            //Parse the file
            while (reader.Read()) ;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号