您的位置:首页 > 大数据 > 人工智能

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

2007-04-26 08:51 537 查看
项目描述:打造一个在线通信录,实现在线通讯录的显示、添加、删除

项目分析:

一、数据文件

需要的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>ninesunnine@sina.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>ninesunnine@sina.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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐