对XML进行简单的查询,插入,删除,编辑操作

  以前一直搞不明白为什么要用XML这个东西,总觉的没什么用,可是后来慢慢才知道如今的WEB应用已经无法离开XML了,尽管我此刻对XML的认识依然是一知半解,但总算是知道了一些最基本的操作,今天只是讲一下对XML的基本读写操作,相信对不了解XML的朋友还是会有一点点帮助的。

  在讲代码之前还是先说一下概念上的东东吧,XML是干什么用的?这是很多不了解XML的朋友都会问的一句话,由于很多地方都拿XML和HTML做比较,所以我以前也一直认为XML可能就是一种新的HTML,其实虽然都是标记语言但XML和HTML在本质上是有很大区别的,想想看,HTML这个我们都熟悉的东西,他是做什么用的?他就是一个包含了文字图像影视等对象的文件,而且经过了格式美化用来给我们阅读欣赏,HTML最主要的功能就是让人“看”,而XML不同,虽然他也能让人“看”可他更为重要的功能是用来存储数据,他能够实现关系型数据库的基本功能,能够对数据对象进行常见的添加、编辑、删除、查询。而这些是HTML所不能够实现的,所以我觉的看XML和HTML区别首先要记住这一点,而对于经常提到的“XML可随意扩展HTML不好扩展”这样的话太抽像,会让入门的人听的云里雾里的。那XML的数据管理功能没有数据库强大为什么我们要用XML存取数据而不直接用数据库?主要原因大概有两个:1、对于小量的数据而言使用XML比使用数据库性能要好,也能大量减轻数据库的负担;2、XML的兼容性,开放性,使它在所有平台上都能使用,所有WEB开发语言都能对他进行操作。因为他的种种优点使XML应用的十分广泛,比如在ASP.NET中的DataSet就是使用XML来存放数据,配置文件Web.Config也是使用XML,以方便在程序中通过API进行灵活配置。当然,要想正常的“看”一XML文件有时还需要使用XSD(设计架构)和XSL(样式语言)对XML进行一下处理,否则直接显示XML文件可读性是很差的,对于XSD和XSL的使用还不是很熟练也就不说这个了。

  好了言归正传,先从XML数据读取开始。先把练习用的XML贴出来

<? xml version="1.0" standalone="yes" ?>
< NewDataSet >
  
< Table >
    
< ShipperID > 1 </ ShipperID >
    
< CompanyName > Speedy Express </ CompanyName >
    
< Phone > 0086 </ Phone >
  
</ Table >
  
< Table >
    
< ShipperID > 2 </ ShipperID >
    
< CompanyName > United Package </ CompanyName >
    
< Phone > (503) 555-3199 </ Phone >
  
</ Table >
  
< Table >
    
< ShipperID > 3 </ ShipperID >
    
< CompanyName > Federal Shipping </ CompanyName >
    
< Phone > (503) 555-9931 </ Phone >
  
</ Table >
  
< Table >
    
< ShipperID > 4 </ ShipperID >
    
< CompanyName > Linag </ CompanyName >
    
< Phone > 8555520 </ Phone >
  
</ Table >
  
< Table >
    
< ShipperID > 5 </ ShipperID >
    
< CompanyName > Chang </ CompanyName >
    
< Phone > 0991 </ Phone >
  
</ Table >   
</ NewDataSet >

  在上面这个XML中NewDataSet是根节点 Table是一级节点 ShipperID,CompanyName,Phone是二级节点

1、最简单的XML数据读取方法

DataSet ds  =   new  DataSet();
ds.ReadXml(Server.MapPath(
" Shippers.xml " )); // 使用DataSet的ReadXml方法读取一个XML文件
GridView1.DataSource  =  ds.Tables[ 0 ]; // 把读出来的XML数据绑定给一个GridView来显示
GridView1.DataBind();

  同样还可以使用通过DataSet的WriteXml方法把一个数据库里的表写成一个XML文件,很简单就不多说了。

2、添加一条记录

  添加一条记录可以使用DataSet把XML读出来,之后在DataSet中进行NewRow的操作和对数据库操作一样,只是在添加完成后使用WriteXml方法把添加的数据保存一下就OK了,我今天要讲的是使用XmlDocument及相关类进行数据添加。

XmlDocument xml  =   new  XmlDocument(); // 先建立一个XmlDocument对象
        xml.Load(Server.MapPath( " Shippers.xml " )); // 用新建的对象读取我们的XML文件
        XmlNode root  =  xml.DocumentElement; // 新建一个XML节点对象,并把我们上面建的XML对象的根节点赋给它
        XmlElement xe  =  xml.CreateElement( " Table " ); // 新建一个元素名为Table,其实也就是新建一行的概念
                        
        XmlElement xe1 
=  xml.CreateElement( " ShipperID " ); // 新建一个元素名为ShipperID,其实也就是新建一列的概念
        xe1.InnerText  =   " 5 " ; // 给新建的列赋值
        
// xe1.SetAttribute("test", "0");这一行是给行或列元素添加一个名为test属性,值为0的语法
        xe.AppendChild(xe1); // 把新建列加到新建行中,下面两段的内容同上,又建了两个列

        XmlElement xe2 
=  xml.CreateElement( " CompanyName " );
        xe2.InnerText 
=   " Linag " ;
        xe.AppendChild(xe2);

        XmlElement xe3 
=  xml.CreateElement( " Phone " );
        xe3.InnerText 
=   " 0991 " ;
        xe.AppendChild(xe3);
        
        root.AppendChild(xe);
// 把新建的行添加到根节点上
        xml.Save(Server.MapPath( " Shippers.xml " )); // 存盘

3、编辑数据

  同样可以使用DataSet进行编辑,我们还是讲使用XmlDocument来编辑,使用两个循环在XML文件中查找名为Phone且值为0991的节点,找到后进行修改

        XmlDocument xml  =   new  XmlDocument();
        xml.Load(Server.MapPath(
" Shippers.xml " ));
        
        XmlNodeList xnl 
=  xml.DocumentElement.ChildNodes;   // 新建一个节点列表对象,把读取的XML文件根节点下的所有子节点赋给它 
        XmlNodeList xnl_child; // 再建一个节点列表对象,后面用
        XmlElement xe;
        
        
for  ( int  i  =   0 ; i  <  xnl.Count; i ++ ) // 第一个循环对根节点下的一级子节点进行访问
         {
            xnl_child 
= xnl.Item(i).ChildNodes; //把访问到的一级节点所包含的子节点赋给前面建的节点列表           

            
for (int x = 0; x < xnl_child.Count; x++)//第二个循环对一级节点下的二级节点进行访问
            
                xe 
= (XmlElement)xnl_child.Item(x);//把访问到的二级节点转换成元素对象
                if (xe.Name == "Phone" && xe.InnerText == "0991")//如果这个元素的名称和内容是我们要找的
                
{
                    xe.InnerText 
= "8800";//就进行内容修改
                    xml.Save(Server.MapPath("Shippers.xml"));
                    Response.Write(
"记录编辑完成!");
                    
return;
                }
                
            }

        }

        Response.Write(
" 没有找到符合的记录! " );

4、删除数据

  删除数据和编辑数据一样,只有一句代码不同

        XmlDocument xml  =   new  XmlDocument();
        xml.Load(Server.MapPath(
" Shippers.xml " ));

        XmlNodeList xnl 
=  xml.DocumentElement.ChildNodes;
        XmlNodeList xnl_child;
        XmlElement xe;

        
for  ( int  i  =   0 ; i  <  xnl.Count; i ++ )
        
{
            xnl_child 
= xnl.Item(i).ChildNodes;

            
for (int x = 0; x < xnl_child.Count; x++)
            
{
                xe 
= (XmlElement)xnl_child.Item(x);
                
if (xe.Name == "Phone" && xe.InnerText == "0991")
                
{
                    xml.DocumentElement.RemoveChild(xnl.Item(i));
//这里把编辑改成删除就行了,注意删除语法:把XML根节点(DocumentElement)下的一级节点(xnl.Item(i))删除掉。
                    xml.Save(Server.MapPath("Shippers.xml"));
                    Response.Write(
"指定记录已删除!");
                    
return;
                }

            }

        }

        Response.Write(
" 没有找到符合的记录! " );

5、使用Xpath进行查找

  上面编辑和删除时,我们为了查找到我们要求的数据使用了两个循环,其实我们完全可以使用Xpath来进行查找我们想要的数据条件,Xpath很像SQL中的Select语句,他的功能也是比较复杂的,光函数就有一百多个,http://www.w3pop.com/tech/school/xpath/xpath_syntax.asp这个网站有对Xpath语法的详细列表。我在这里只举个简单的例子来说明一下它的用法。比如我们要查找电话为0991的公司名称:

        XmlDocument xml  =   new  XmlDocument();
        xml.Load(Server.MapPath(
" Shippers.xml " ));
        XmlElement xe 
=  (XmlElement)xml.SelectSingleNode( " //Table[Phone='0991']/CompanyName " ); // 关键在这里
        Response.Write(xe.InnerText);

  首先我们要使用XmlDocument类里的SelectSingleNode方法进行查询:

"//Table[Phone='0991']/CompanyName"

  上面这句引号里的内容就是Xpath查询语句,它的结构与DOS下的文件系统(例如:C:/winows/System/win.com)十分相似,在查询语句里可以使用通配符,运算符,函数等复杂的表达式,这不是一两句能说清楚的,在我上面提供的网站里有说明,大家好好看看吧。另外,我在上面使用的是SelectSingleNode方法,这个方法顾名思义只能返回一个查询结果,如果要返回多个查询结果比如把电话为0991的一行数据全部返回:

        XmlDocument xml  =   new  XmlDocument();
        xml.Load(Server.MapPath(
" Shippers.xml " ));        
        XmlNodeList xnl 
=  xml.SelectNodes( " //Table[Phone='0991']/* " ); // 建立一个节点集,把查询到的多个结果放到里面
         foreach  (XmlElement xe  in  xnl) // 把每个节点转成元素显示出来
         {
            Response.Write(xe.InnerText 
+ “<br>”);
        }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值