打造一个在线通信录,实现在线通讯录的显示、添加、删除

80酷酷网    80kuku.com

  显示|在线

项目描述:打造一个在线通信录,实现在线通讯录的显示、添加、删除

项目分析:

一、数据文件

需要的Xml文件(txl.xml)如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="txl.xsl"?>

<txl>

         <user>

                  <pic>1.bmp</pic>

                  <name>ittalk</name>

                  <tel>51872033</tel>

                  <qqmsn>7987931</qqmsn>

                  <mobil>13667181380</mobil>

                   <work>北大青鸟</work>

                  <address>北大青鸟武汉赛德</address>

                  <email>ninesunninesina.com</email>

                  <otherMsg></otherMsg>

         </user>

         <user>

                  <pic>2.bmp</pic>

                  <name>ittalk</name>

                  <tel>51872033</tel>

                  <qqmsn>7987931</qqmsn>

                  <mobil>13667181380</mobil>

                   <work>北大青鸟</work>

                  <address>北大青鸟武汉赛德</address>

                  <email>ninesunninesina.com</email>

                  <otherMsg></otherMsg>

         </user>

</txl>

 

XML文件对应的样式表为txl.xsl

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">

<table align="center" width="90%" border="1">

         <tbody>

                   <tr bgcolor="#336699">

                            <th>图片</th>

                            <th>姓名</th>

                            <th>电话</th>

                            <th>qq/Msn</th>

                            <th>手机</th>

                            <th>工作单位</th>

                            <th>通信地址</th>

                            <th>Email</th>

                            <th>其他信息</th>                      

                   </tr>

                  <xsl:apply-templates select="/txl/user"/>

         </tbody>

 

</table>

</xsl:template>

<xsl:template match="user">

<tr>

         <td><xsl:variable name="x"><xsl:value-of select="pic"/></xsl:variable><img src="{$x}"></img></td>

         <td><xsl:value-of select="name"/></td>

         <td><xsl:value-of select="tel"/></td>

         <td><xsl:value-of select="qqmsn"/></td>

         <td><xsl:value-of select="mobil"/></td>

         <td><xsl:value-of select="work"/></td>

         <td><xsl:value-of select="address"/></td>

         <td><xsl:value-of select="email"/></td> 

         <td><xsl:value-of select="otherMsg"/></td>

</tr>

</xsl:template>

</xsl:stylesheet>

        

二、显示Xml文件

使用xsl自动样式显示XML文件步骤:

1、   先定义一个System.IO.StringWriter对象

2、   创建一个Xml的文档对象,并家载Xml文件

3、   创建一个XslTransform对象并加载Xsl文件

4、   调用转换函数(第一个参数Xml文档对象,第二个参数null,第三个参数StringWriter对象,第四个参数null)

5、   调用Response.Writer方法显示StringWriter对象中的数据。

//先定义一个System.IO.StringWriter对象

              System.IO.StringWriter sw=new StringWriter();

              //创建一个Xml的文档

              System.Xml.XmlDocument doc=new XmlDocument();

              //装载一个Xml文档

              doc.Load(Server.MapPath("txl.xml"));

              //创建一个System.Xml.Xsl.XslTransform对象

              System.Xml.Xsl.XslTransform xst=new XslTransform();

              //装载xml文件对应的样式表txl.xsl

              xst.Load(Server.MapPath("txl.xsl"));

              //利用xst来转换doc的显示

              xst.Transform(doc,null,sw,null);

              Response.Write(sw.ToString());          

三、在通信录中添加用户

相关知识:

1、  XmlDocument对象是所有DOM树的根,这个根至少有一个子节点,即根元素,该根元素使用DocumentElement表示,还可以有一个根元素,那就是DocumentType表示DTD类型。

2、  XmlDocument对象的一些属性

a)         HasChildNodes

b)        ChildNodes

c)        ParentNode

d)        InnerXml属性节点和其子节点的串联值。

e)         OuterXml表示该节点和其子节点的标记

如何更新一个文件

1、   先创建一个Xml文档对象,同时加载对应的XML文件

2、   获取Xml文档对象的根结点root

3、   创建一个元素,同时给该元素初始化

4、   在对应的位置放置该元素。

5、   创建4中元素对应的子元素,同时在4中的元素的下面添加对应的元素。

6、   记住将修改完毕的XML文件存盘,这时候需要调用XmlDocument对象的Save方法。

 

              //首先创建一个Xml文档对象,同时加载对应的XML文件

              System.Xml.XmlDocument doc=new XmlDocument();

              //加载txl.xml文件

              doc.Load(Server.MapPath("txl.xml"));

              //定位该文件的根结点

              XmlNode root=doc.DocumentElement;

              //在doc中创建一个元素user

              XmlElement user=doc.CreateElement("user");

              //将user元素添加到树根的尾部

              root.AppendChild(user);

              //在doc中创建一个元素name

              XmlElement name2=doc.CreateElement("name");

              //设置name元素的文本内容

              name2.InnerText=name1.Text;

              XmlElement tel1=doc.CreateElement("tel");

              tel1.InnerText=tel.Text;

              XmlElement qqmsn1=doc.CreateElement("qqmsn");

              qqmsn1.InnerText=qqmsn.Text;

              XmlElement mobil1=doc.CreateElement("mobil");

              mobil1.InnerText=mobil.Text;

              XmlElement work1=doc.CreateElement("work");

              work1.InnerText=work.Text;

              XmlElement address1=doc.CreateElement("address");

              address1.InnerText=address.Text;

              XmlElement email1=doc.CreateElement("email");

              email1.InnerText=email.Text;

              XmlElement otherMsg1=doc.CreateElement("otherMsg");

              otherMsg1.InnerText=otherMsg.Text;

 

              //将创建的user元素的子元素添加到user元素的节点内部。

              user.AppendChild(name2);

              user.AppendChild(tel1);

              user.AppendChild(qqmsn1);

              user.AppendChild(mobil1);

              user.AppendChild(work1);

              user.AppendChild(address1);

              user.AppendChild(email1);

              user.AppendChild(otherMsg1);

              //将对txl.xml文件的修改存入文件

              doc.Save(Server.MapPath("txl.xml"));

    

四、在通信录中查找一个用户

基本知识:需要读取XML的数据,并进行对照。

1、  要读取XML可以使用XmlReader类,但是该类是一个抽象类,用于读取基于文本的XML文件的XmlTextReader类,实现了XmlReader类。

2、  当必须通过DOM将文档的一部分读取到内存中的时候,应该使用XmlTextReader类。

3、  首先创建XmlTextReader类的实例,并调用Read方法来读取文件。

a)         创建实例的时候可以传递参数为Xml文件

b)        调用Read()方法逐个读取其节点直至到达文件的结尾。

 

 

              //声明并创建XmlTextReader类的对象xtr

              XmlTextReader xtr=new XmlTextReader(Server.MapPath("txl.xml"));

              string wsx="";

              bool flag=false;

              string showMsg="";

              string tmpNodeName="";

              //利用xtr对象的Read()方法循环读取文件的节点

              while(xtr.Read())

              {

                   //当找到了那个人同时节点的类型是元素同时节点的名称是user的时候退出循环

                   if(flag==true && xtr.NodeType==System.Xml.XmlNodeType.Element && xtr.LocalName.Equals("user"))

                       break;                  

                   //当节点类型是元素的时候,记录该元素的节点名称

                   if(xtr.NodeType==System.Xml.XmlNodeType.Element)

                        tmpNodeName=xtr.LocalName.ToString();

                   //当没有找到指定的人时,判断xtr是不是文本类型

                   if(flag==false)

                   if( xtr.NodeType==System.Xml.XmlNodeType.Text)//如果为文本类型那么          

                        if(xtr.Value==userName.Text)//当为文本类型同时对应的值为要查找的人的时候

                       {                      

                            flag=true;//设置找到了要找的人的标志

                       }

                   //如果已经找到了这个人同时xtr当前为文本类型那么

                   if(flag==true && xtr.NodeType==System.Xml.XmlNodeType.Text)

                        showMsg += " "+tmpNodeName+":"+xtr.Value;

              }

              //关闭xtr

              xtr.Close();

              //显示找到的人的详细信息

              Response.Write(showMsg);

        

 

五:利用xmlPath来删除指定节点

 

//首先定义一个文档对象

              XmlDocument doc=new XmlDocument();

              doc.Load(Server.MapPath("txl.xml"));

              XmlNode xn=doc.SelectSingleNode("/txl/user[name=\"" + userName.Text +"\"]");          

              try

              {

                   XmlNode parentxn=xn.ParentNode;

                   parentxn.RemoveChild(xn);    

              }

              catch(Exception ex)

              {

                   Response.Write(ex.Message.ToString());

              }

              doc.Save(Server.MapPath("txl.xml"));

 

六:利用xmlPath来更新指定的节点

 

              XmlDocument doc=new XmlDocument();

              doc.Load(Server.MapPath("txl.xml"));

              //利用XmlDocument的SelectNodes方法来查找指定的用户名称符合的所有user

              XmlNode xn=doc.SelectSingleNode("/txl/user[name=\"" + userName.Text +"\"]");

              try

              {

                   //遍历子节点

                   for(int i=0;i<xn.ChildNodes.Count;i++)

                   {

 

                   //给对应的子节点的内容赋值

                        xn.ChildNodes[i].InnerText=(i).ToString();

                   }

                   doc.Save(Server.MapPath("txl.xml"));

                  

              }

              catch( Exception ex)

              {

                   Response.Write(ex.Message);

              }

七、数据转换成DataSet

              System.Data.DataSet ds=new DataSet();

              ds.ReadXml(Server.MapPath("txl.xml"));

              DataGrid1.DataSource=ds;

              DataGrid1.DataBind();

八、将DataSet的数据写入Xml

                    

              SqlConnection con=new SqlConnection("Server=.;uid=sa;pwd=;database=pubs");

              SqlDataAdapter da=new SqlDataAdapter("select * from authors",con);

              System.Data.DataSet ds=new DataSet();

              da.Fill(ds);

          //将DataSet里面的数据写入XML

              ds.WriteXml(Server.MapPath("authors.xml"));

              DataGrid1.DataSource=ds;

              DataGrid1.DataBind();




分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间

上一篇第14章 XSL变换

下一篇DOM的结构

点击: