1、XML是什么?
xml和json一样,都是数据语言,以简单的文本格式存储数据,可以被人类和几乎任何计算机读取。说到底,就是一个文本格式,就像html能被浏览器识别一样。
2、XML的功能及使用场景
上面说了xml以简单的文本格式存储数据,我们可以使用代码对xml文件进行增删改查。那它的功能和谁相似呢?没错,就是数据库。区别是什么呢,数据库不通用、复杂、慢,但是功能强;xml通用、简单、快、功能稍弱。功能的强和弱以什么区分呢,存储能力。xml不适合存储大批量的数据,一个10多g的数据表好处理,一个10多g的文本文件估计打开就得费不少时间。
根据xml的功能,我们可以知道xml只适合存储少量的数据。如果是这样的话,愚以为xml的增删改的用处就不太多了,所以这里我们只学习xml的编写和查询。那它在我这的使用场景是啥呢,就是存一些固定的、轻易不会更改的数据。比如:网站的配置、国内的省市县的地区信息、各大银行的名称与编码啥的。
3、XML基础知识
xml由两部分组成,一个是声明,一般为<?xml version="1.0" encoding="utf-8" ?>;另一个是xml数据,以一个根节点为开端,在根节点内部编写数据。xml有且只有一个根节点。根节点中设置子节点,每个节点由一对闭合标签和标签中的数据组成。节点也可以设置属性(也可以叫特性),可以根据属性值来寻找对应的节点,下面例子中的key就是一个属性。举个栗子:
<?xml version="1.0" encoding="utf-8" ?> <banks> <bank key="独一"> <name>中国建设银行</name> <code>1001</code> </bank> <bank key="无二"> <name>中国工商银行</name> <code>1002</code> </bank> </banks>
4、XML模式
XML模式,也可以叫XML架构(书里面叫模式,vs里面叫架构)。可以简单理解成一个xml的模板,当我们创建一个xml文件并引用该模板后,你就得按照模板的要求编写xml文件,目的呢就是为了不让你瞎写,避免出现预期之外的数据,也可以理解成是一种验证吧。
怎么用呢,首先我们创建一个xml文件,在vs中当前打开的如果是xml文件的话,vs会出现xml菜单,点击菜单中的创建架构,这个事就算成了。vs会根据默认的路径创建一个后缀名为xsd的文件,这个文件便是我们创建的架构。我们下次编写xml文件的时候便可以在xml菜单/架构中引用该架构了。多提一嘴,这个架构不保存在项目中,而是vs的文件夹中,想要团队使用的话估计还得费点功夫。
5、XmlDocument类
处理xml文件,首先应该读取它,并且将该文件转化为一个可操作的对象,这个对象就是XmlDocument类。
我们如何才能读取这个类呢?第一步,创建一个xml文件并将该文件存放至web项目中,设置其属性为复制到输出项目中。第二步先看代码,HttpContext.Current.Server.MapPath的用处是返回物理路径,方法中的参数是文件相对于站点根目录的路径,新建XmlDocument类并加载该文件,这个XmlDocument类就包含了对应xml文件中的所有数据了。
XmlDocument document = new XmlDocument(); document.Load(HttpContext.Current.Server.MapPath(@"ConfigBankData.xml"));
6、XmlElement类
上面实例化后的XmlDocument类有一个DocumentElement属性,这个属性就是XmlElement类,这个类里面包含了文档中的所有信息。那么如何把这些信息实例化成对象列表呢?看代码吧
var list = new List<BankModel>(); XmlDocument document = new XmlDocument(); document.Load(HttpContext.Current.Server.MapPath(@"ConfigBankData.xml")); XmlElement element = document.DocumentElement; XmlNodeList xmlList = element.ChildNodes; foreach (XmlElement nodeList in xmlList) { var name = nodeList.SelectNodes("name")[0].InnerText; var code = Convert.ToInt32(nodeList.SelectNodes("code")[0].InnerText); list.Add(new BankModel() { BankName=name,BankId=code}); } return list;
写的比较简单,后面遇到复杂点的再更新吧