.Net单元测试(二)——XML数据载体的优势与实际应用

来源:互联网 发布:阿里云服务器搭建云免 编辑:程序博客网 时间:2024/05/17 23:04


  XML基础与应用提到XML的一个很重要的应用之一就是作为数据载体,应用于数据库对数据进行存储。下面我们一起来讨论XML作为数据载体的优势和具体如何实现。

XML作为数据载体的优势:

1、良好的通用性和可读性:

XML类似于HTML的语言,它没有预先定义的标签,使用DTD(document typedefinition)文档类型定义来组织数据。因此使得其格式统一,通用性良好。并且在XML文档中,可以使用特定的标记为数据定义相关的语义,可读性大大提高,早已成为业界公认的标准。 

2、轻松的跨平台应用

XML文档是基于文本的,所以很容易被人和机器阅读,也非常容易使用,便于不同设备和不同系统间的信息交换。

3、清晰的层次结构:

由于XML本身的树形结构特点,它所承载的数据格式能够清晰表达数据的层次特征,因此XML便于对层次化的数据进行操作。

4、数据内容与形式的分离

XML文档中,数据的显示样式已从文档内容中分离出来,放入相关的样式表文件中。这样一来如果要改动数据的表现形式,就不需要改动数据本身,而只要改动控制数据显示的样式表文件即可。

5、适合面向对象的程序开发

XML文档数据的逻辑结构是一种树形的层次结构,文档中的每一个元素都可以视为一个对象,同时也可以有相应的属性和方法,因而非常适合于使用面向对象的程序设计方式来开发处理这些XML文档的应用程序。

XML作为数据载体的增删改实例:

接下来,笔者利用一个以XML为数据载体的增删改查demo来简单说明XML与数据之间的交互(由于空间有限,只展示主要代码)。

1、首先在vs中新建ASP.NET项目,在项目中新建一个xml文本文件用于存储数据,编写代码如下:

<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE DocumentElement[  <!ELEMENT DocumentElement ANY>  <!ELEMENT basic (ID,NAME)>  <!ELEMENT bas-ic (ID,ADDRESS)>  <!ELEMENT basic (ID,CALL)>  <!ELEMENT basic (ID,JOP)>  <!ELEMENT basic (ID,JOPP)>  <!ELEMENT ID (#PCDATA)>  <!ELEMENT NAME (#PCDATA)>  <!ELEMENT ADDRESS (#PCDATA)>  <!ELEMENT CALL (#PCDATA)>  <!ELEMENT JOP (#PCDATA)>  <!ELEMENT JOPP (#PCDATA)>]><?xml-stylesheet type="text/xsl" href="style.xsl"?><DocumentElement>  <basic>    <ID>1</ID>    <NAME>钟艾伶</NAME>    <ADDRESS>北京</ADDRESS>    <CALL>1888888883</CALL>    <JOP>医生</JOP>    <JOPP>护士</JOPP>  </basic>  <basic>    <ID>2</ID>    <NAME>包子</NAME>    <ADDRESS>北京</ADDRESS>    <CALL>1888888888</CALL>    <JOP>医生</JOP>    <JOPP>护士</JOPP>  </basic>    <basic>    <ID>3</ID>    <NAME>小李子</NAME>    <ADDRESS>北京</ADDRESS>    <CALL>1878888888</CALL>    <JOP>医生</JOP>    <JOPP>护士</JOPP>  </basic>    <basic>    <ID>4</ID>    <NAME>王大绩</NAME>    <ADDRESS>四川</ADDRESS>    <CALL>1876888888</CALL>    <JOP>医生</JOP>    <JOPP>护士</JOPP>  </basic>  </DocumentElement>

2、新建xslt文件,作为xml文件内容的风格表单,编写代码如下: 

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">  <xsl:template match ="DocumentElement">    <html>      <body>        <table>          <tr>            <th>ID</th>            <th>NAME</th>            <th>ADRESS</th>            <th>CALL</th>            <th>JOP</th>            <th>JOPP</th>          </tr>          <xsl:for-each select ="basic">            <tr>              <td>                <xsl:value-of select="ID"/>              </td>              <td>                <xsl:value-of select="NAME"/>              </td>              <td>                <xsl:value-of select="ADRESS"/>              </td>              <td>                <xsl:value-of select="CALL"/>              </td>              <td>                <xsl:value-of select="JOP"/>              </td>              <td>                <xsl:value-of select="JOPP"/>              </td>            </tr>          </xsl:for-each>        </table>      </body>    </html>  </xsl:template></xsl:stylesheet>

3、新建一个web窗体,添加Gridview绑定显示xml存放的数据,显示效果见图1。

 <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile ="~/basic.xml"></asp:XmlDataSource>                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataSourceID ="XmlDataSource1" AutoGenerateSelectButton="true" >            <Columns>                <asp:TemplateField HeaderText="编号">                    <ItemTemplate>                        <%#XPath("ID")%>                     </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField HeaderText="姓名">                    <ItemTemplate>                        <%#XPath("NAME")%>                     </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField HeaderText="地址">                    <ItemTemplate>                        <%#XPath("ADDRESS")%>                     </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField HeaderText="电话">                    <ItemTemplate>                        <%#XPath("CALL")%>                     </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField HeaderText="职业">                    <ItemTemplate>                        <%#XPath("JOP")%>                     </ItemTemplate>                </asp:TemplateField>                 <asp:TemplateField HeaderText="职称">                    <ItemTemplate>                        <%#XPath("JOPP")%>                     </ItemTemplate>                </asp:TemplateField>            </Columns>        </asp:GridView>

图1:

4、在窗体中添加相应控件,进行增删改查代码的编写   

    public partial class Default : System.Web.UI.Page    {        XmlDocument xdoc;        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                FillXdoc();            }            else            {                xdoc = Session["doc"] as XmlDocument;              }        }        /// <summary>        /// 刷新XML中的数据        /// </summary>        private void FillXdoc()        {            xdoc = new XmlDocument();            xdoc.Load(Server.MapPath("basic.xml"));            XmlNodeList list = xdoc.GetElementsByTagName("NAME");            foreach (XmlNode node in list)            {                this.DropDownList1.Items.Add(node.InnerText);                Session["doc"] = xdoc;            }        }                //查询,根据姓名查询相关信息,显示在textbox中        protected void Button1_Click1(object sender, EventArgs e)        {            XmlNode node = xdoc.DocumentElement.SelectSingleNode("basic[NAME='" + this.DropDownList1.Text + "']");            foreach (XmlNode no in node.ChildNodes)            {                //1编号 2地址 3电话  4职业 5职称                if (no.LocalName == "ID")                    this.TextBox1.Text = no.InnerText;                if (no.LocalName == "ADDRESS")                    this.TextBox2.Text = no.InnerText;                if (no.LocalName == "CALL")                    this.TextBox3.Text = no.InnerText;                if (no.LocalName == "JOP")                    this.TextBox4.Text = no.InnerText;                if (no.LocalName == "JOPP")                    this.TextBox5.Text = no.InnerText;            }        }        //AppendChild 添加节点        protected void Button2_Click(object sender, EventArgs e)        {             XmlNode node = xdoc.SelectSingleNode("DocumentElement");            XmlElement xe = xdoc.CreateElement("basic");            XmlElement xe1 = xdoc.CreateElement("ID");            xe1.InnerText = TextBox1.Text;            xe.AppendChild(xe1);            //NAME添加            XmlElement xe2 = xdoc.CreateElement("NAME");            xe2.InnerText = TextBox2.Text;            xe.AppendChild(xe2);            XmlElement xe3 = xdoc.CreateElement("ADRESS");            xe3.InnerText = TextBox2.Text;            xe.AppendChild(xe3);            XmlElement xe4 = xdoc.CreateElement("CALL");            xe4.InnerText = TextBox3.Text;            xe.AppendChild(xe4);            XmlElement xe5 = xdoc.CreateElement("JOP");            xe5.InnerText = TextBox4.Text;            xe.AppendChild(xe5);            XmlElement xe6 = xdoc.CreateElement("JOPP");            xe6.InnerText = TextBox5.Text;            xe.AppendChild(xe6);            node.AppendChild(xe);            xdoc.Save(Server.MapPath("basic.xml"));            Response.Write("<script>alert('添加成功!');</script>");        }        //RemoveChild 删除节点        protected void Button3_Click(object sender, EventArgs e)        {            XmlNode node = xdoc.DocumentElement.SelectSingleNode("basic[NAME='" + this.DropDownList1.Text + "']");            if (node != null)            {                xdoc.DocumentElement.RemoveChild(node);                this.DropDownList1.Items.RemoveAt(this.DropDownList1.SelectedIndex);                xdoc.Save(Server.MapPath("basic.xml"));            }        }               //修改内容        protected void Button4_Click(object sender, EventArgs e)        {            XmlElement xmle = (XmlElement)xdoc.DocumentElement.SelectSingleNode("basic[NAME='" + this.DropDownList1.Text + "']");            xmle.GetElementsByTagName("ADDRESS").Item(0).InnerText = TextBox2.Text;            xmle.GetElementsByTagName("CALL").Item(0).InnerText = TextBox3.Text;            xmle.GetElementsByTagName("JOP").Item(0).InnerText = TextBox4.Text;            xmle.GetElementsByTagName("JOPP").Item(0).InnerText = TextBox5.Text;            xdoc.Save(Server.MapPath("basic.xml"));            Response.Write("<script>alert('修改成功!');</script>");          }
 

这样一来,便实现了通过增删改查按钮对XML中的数据进行操作并显示在Gridview中。

从上面的代码可以看出,对XML的操作主要是利用其先天的根结构特点,将其每个节点视为对象,通过RemoveChild() AppendChild() SelectSingleNode()等常用方法,对数据进行增删改查操作。所以这也体现了我们开头所谈的xml具有清晰的数据结构层次,且符合面向对象编程思想。

   


0 0
原创粉丝点击