上一篇博文针对xml用做数据载体的优势与简单应用,笔者利用一个demo来说明具体如何实现对XML存储的数据内容进行增删改查操作。
这篇博客,笔者将以高校云平台项目为基石,在高校项目的基础上去实践xml的运用。
首先对高校云平台做一个简单的介绍:
高校云平台系统是廊坊师范学院信息技术提高班做出的类似于今目标的云平台的系统,最终需要搭建到外网,适用于所有高校的考试、学生教师基础信息的管理、评教工作、校园内行政权限的控制等,达到产品级别。
本次开始进行XML数据载体的研究,最终目的还是要在ITOO(InputTO Output)项目进行测试的时候,为了避免对数据库中真实的数据进行直接操作,通过跟师姐的沟通和考量,决定以xml为数据载体,去承担测试数据的存储更新等操作。
因为接手过ITOO项目的人应该都对它的框架比较清楚:最外的经典三层框架+MVC,每层中间又解耦为工厂、接口和具体实现。这么多模块做单元测试对我们而言是个不小的挑战。笔者以我们权限为例,选取其中一个比较简单的【学校设置】功能,这个需求也就是通过页面传值,将记录插入到数据库实体中。具体实现如下:
1、在权限项目客户端新建一个xml文件,存储测试数据。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE DocumentElement[ <!ELEMENT DocumentElement ANY> <!ELEMENT basic (ID,CALL)> <!ELEMENT basic (ID,EMAIL)> <!ELEMENT basic (ID,ADDRESS)> <!ELEMENT basic (ID,WEBSITE)> <!ELEMENT ID (#PCDATA)> <!ELEMENT CALL (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT ADDRESS (#PCDATA)> <!ELEMENT WEBSITE (#PCDATA)> ]> <?xml-stylesheet type="text/xsl" href="style.xsl"?>
<span style="font-size:14px;"></span>
<span style="font-size:14px;"></span>
【注意】
该xmlDocument的元素内容应与所操作的数据库实体字段一致,不多不少,否则数据插入时,会因为xml节点为空导致插入失败。
2、在controller层引用xml具体对象的相应命名空间,创建一个InsertNod()方法,存储插入该条学校信息。
[HttpPost] public bool SaveSchool() { //实例化B层接口 ISchool iSchool = ServiceFactory.GetSchoolService(); //界面获取来的学校信息 School schoolInfo = new School() { OrgId = new Guid("6BC8ED88-2882-458C-8E55-DFD12B67127B"), OrgName = Request["schoolName"].ToString(), Desciption = "添加描述", LogoId = Guid.NewGuid().ToString(), SchoolNo = "123", PId = new Guid("00000000-0000-0000-0000-000000000000"), Size = 12, IsUse = 1, SchoolTel = Request["phone"].ToString(), Email = Request["email"].ToString(), Address = Request["address"].ToString(), Website = Request["webSite"].ToString() }; //调用B层的更新学校信息接口 var isAdd = iSchool.UpdateSchoolInfo(schoolInfo); if (isAdd == true) { insertnode(); //调用自定义函数InsertNode ,xml生成节点的方法。 } //返回true代表成功更新学校信息 return isAdd; } //向xml中插入该条记录。 public void insertnode() { XmlDocument xdoc; xdoc = new XmlDocument(); xdoc.Load(Server.MapPath("~/basic.xml")); XmlNode node = xdoc.SelectSingleNode("DocumentElement"); XmlElement xe = xdoc.CreateElement("basic"); XmlElement xe1 = xdoc.CreateElement("ID"); xe1.InnerText = Request["phone"].ToString(); xe.AppendChild(xe1); XmlElement xe2 = xdoc.CreateElement("CALL"); xe2.InnerText = Request["phone"].ToString(); xe.AppendChild(xe2); XmlElement xe3 = xdoc.CreateElement("EMAIL"); xe3.InnerText = Request["email"].ToString(); xe.AppendChild(xe3); XmlElement xe4 = xdoc.CreateElement("ADDRESS"); xe4.InnerText = Request["address"].ToString(); xe.AppendChild(xe4); XmlElement xe5 = xdoc.CreateElement("WEBSITE"); xe5.InnerText = Request["webSite"].ToString(); xe.AppendChild(xe5); node.AppendChild(xe); xdoc.Save(Server.MapPath("~/basic.xml")); } #endregion 设置学校信息
【注意】
这里只针对插入记录功能进行阐述。
实现效果:填写学校基本信息,点击保存(图1),插入的学校设置信息便存入到xml中(图2)。
图1:
图2:
通过一个插入操作可以看出,对于xml节点的操作,还是有很多东西值得研究的,毕竟从师姐反馈的信息看来,xml在公司中的运用,并不仅限于配置文件的使用。笔者在做这个实践的时候,思考的比较多的一个是针对性的xml相关技术,另一个就是在我们每一个功能块中,在哪儿加这段插入测试代码合适。像上述实例就是在通过controller中返回插入数据符合插入条件且未插入数据库之前进行编写。所以每一层,不同的测试数据,对于xml的使用还需要测试者对该系统框架和业务有一定的认识才行。