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

前端之家收集整理的这篇文章主要介绍了.Net单元测试(二)——XML数据载体的优势与实际应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


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具有清晰的数据结构层次,且符合面向对象编程思想。



猜你在找的XML相关文章