> 馆藏中心

C#操作XML的问题

来源:cnblogs 编辑:从大磊

序列化成二进制数据,然后保存,后缀名随便自定义即可。using System.Runtime.Serialization.Formatters.Binary;using System.IO;代码序列化public static byte[]BinarySerialize(T source){BinaryFormatter bf=new BinaryFormatter();using(MemoryStream ms=new MemoryStream()){bf.Serialize(ms,source);return ms.ToArray();}}然后 把二进制数据存入文件Object obj=你的数据;byte[]buffer=Serialize(obj);using(FileStream fs=new FileStream("d:\\\\test.dat",FIleOption.OpenOrCreate)){fs.Write(buffer);}读取:byte[]fileBuffer;using(FileStream fs=new FileStream("d:\\\\test.dat",FIleOption.Open)){fileBuffer=new Byte[(int)fs.Length];fs.Wirte(filebuffer,0,fileBuffer.Length);object obj=BinaryDeseralize(fileBuffer);得到 你的数据对象}反序列化public static T BinaryDeseralize(byte[]sourceBuffer){BinaryFormatter bf=new BinaryFormatter();using(MemoryStream ms=new MemoryStream(sourceBuffer)){return(T)bf.Deserialize(ms);}}www.179s.com防采集请勿采集本网。

三种方法:

1,找一些读取XML的类库,定位到A那里,然后替换了

xml文件内容?xml version=\"1.0\"encoding=\"UTF-8?id>7</id><pid>0</pid><continent_id>1</continent_id><guohao>93</guohao><cntitle>阿富汗</cntitle>

2,如果格式固定的话,也可以直接分析字符串,但是毕竟麻烦:从前往后找<A>字符串,如果找到,把后面的冒号替换了,直到遇到</A>,然后再开始下一轮

xml.Load(xml路径);XmlNode node=xml.DocumentElement;List<string>_list=new List();foreach(XmlNode SubNode in node) { list.Add(SubNode.InnerText);} return_list;} 如果想获取省市及对应的城市,

3,用正则表达式搜索,不过我没搞过,应该是可以的,你试试收获园豆:50

XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。二、特点不同 1、csharp:在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如

============================================

using System.Xml;XmlDocument xmlDoc=new XmlDocument();xmlDoc.Load(Server.MapPath(\"这里是你的XML的地址\"));XmlNode cNodes=xmlDoc.SelectSingleNode(\"columns\");for(int i=0;i;i+) {

好的谢谢这有啥指导的?.net里有解析xml的东西,直接用起来解析就行了呗,这还咋指导?

其实你的问题是不是就是问怎么解析XML文件?可以从网上或者MSDN上找一些解析xml文件的例子。

Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件。2:3:4:5:数据结构 6:严蔚敏 7:30.00 8:9:10:路由型与交换型互联网基础 11:程庆梅 12:27.00 13:14:15:计算机硬件技术基础 16:李继灿 17:25.00 18:19:20:软件质量保证与管理 21:朱少民 22:39.00 23:24:25:算法设计与分析 26:王红梅 27:23.00 28:29:30:计算机操作系统 31:7-111-19149-1 32:28 33:34:为了方便读取,我还定义一个书的实体类,名为BookModel,具体内容如下:1:using System;2:using System.Collections.Generic;3:using System.Linq;4:using System.Text;5:6:namespace 使用XmlDocument 7:{ 8:publicclass BookModel 9:{ 10:public BookModel()11:{ } 12:/13:/所对应的课程类型 14:/15:privatestring bookType;16:17:publicstring BookType 18:{ 19:get { return bookType;} 20:set { bookType=value;} 21:} 22:23:/24:/书所对应的ISBN号 25:/26:privatestring bookISBN;27:28:publicstring BookISBN 29:{ 30:get { return bookISBN;} 31:set { bookISBN=value;} 32:} 33:34:/35:/书名 36:/37:privatestring bookName;38:39:publicstring BookName 40:{ 41:get { return bookName;} 42:set { bookName=value;} 43:} 44:45:/46:/作者 47:/48:privatestring bookAuthor;49:50:publicstring BookAuthor 51:{ 52:get { return bookAuthor;} 53:set { bookAuthor=value;} 54:} 55:56:/57:/价格 58:/59:privatedouble bookPrice;60:61:publicdouble BookPrice 62:{ 63:get { return bookPrice;} 64:set { bookPrice=value;} 65:} 66:} 67:}1.使用XmlDocument.使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:1:xn 代表一个结点 2:xn.Name;这个结点的名称 3:xn.Value;这个结点的值 4:xn.ChildNodes;这个结点的所有子结点 5:xn.ParentNode;这个结点的父结点 6:.1.1 读取所有的数据.使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.1:XmlDocument doc=new XmlDocument();2:doc.Load(@".\\.\\Book.xml");然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码 1:/得到根节点bookstore 2:XmlNode xn=xmlDoc.SelectSingleNode("bookstore");3:4:5:/得到根节点的所有子节点 6:XmlNodeList xnl=xn.ChildNodes;7:8:foreach(XmlNode xn1 in xnl)9:{ 10:BookModel bookModel=new BookModel();11:/将节点转换为元素,便于得到节点的属性值 12:XmlElement xe=(XmlElement)xn1;13:/得到Type和ISBN两个属性的属性值 14:bookModel.BookISBN=xe.GetAttribute("ISBN").ToString();15:bookModel.BookType=xe.GetAttribute("Type").ToString();16:/得到Book节点的所有子节点 17:XmlNodeList xnl0=xe.ChildNodes;18:bookModel.BookName=xnl0.Item(0).InnerText;19:bookModel.BookAuthor=xnl0.Item(1).InnerText;20:bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);21:bookModeList.Add(bookModel);22:} 23:dgvBookInfo.DataSource=bookModeList;在正常情况下,上面的代码好像没有什么问题,但是对于读取上面的XML文件,则会出错,原因就是因为我上面的XML文件里面有注释,大家可以参看Book.xml文件中的第三行,我随便加的一句注释.注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错."无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。幸亏它里面自带了解决办法,那就是在读取的时候,告诉编译器让它忽略掉里面的注释信息.修改如下:1:XmlDocument xmlDoc=new XmlDocument();2:XmlReaderSettings settings=new XmlReaderSettings();3:settings.IgnoreComments=true;忽略文档里面的注释 4:XmlReader reader=XmlReader.Create(@".\\.\\Book.xml",settings);5:xmlDoc.Load(reader);最后读取完毕后,记得要关掉reader.1:reader.Close();这样它就不会出现错误.最后运行结果如下:1.2 增加一本书的信息.向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性.具体代码如下:加载文件并选出要结点:1:XmlDocument doc=new XmlDocument();2:doc.Load(@".\\.\\Book.xml");3:XmlNode root=doc.SelectSingleNode("bookstore");创建一个结点,并设置结点的属性:1:XmlElement xelKey=doc.CreateElement("book");2:XmlAttribute xelType=doc.CreateAttribute("Type");3:xelType.InnerText="adfdsf;4:xelKey.SetAttributeNode(xelType);创建子结点:1:XmlElement xelAuthor=doc.CreateElement("author");2:xelAuthor.InnerText="dfdsa;3:xelKey.AppendChild(xelAuthor);最后把book结点挂接在要结点上,并保存整个文件:1:root.AppendChild(xelKey);2:doc.Save(@".\\.\\Book.xml");用上面的方法,是向已有的文件上追加数据,如果想覆盖原有的所有数据,可以更改一下,使用LoadXml方法:1:XmlDocument doc=new XmlDocument();2:doc.LoadXml("");用这句话,会把以前的数据全部覆盖掉,只有你增加的数据直接把根结点选择出来了,后面不用SelectSingleNode方法选择根结点,直接创建结点即可,代码同上.1.3 删除某一个数据想要删除某一个结点,直接找到其父结点,然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,上面的SelectSingleNode可以传入一个Xpath表,我们通过书的ISBN号来找到这本书所在的结点.如下:1:XmlElement xe=xmlDoc.DocumentElement;DocumentElement 获取xml文档对象的根XmlElement.2:string strPath=string.Format("/bookstore/book[@ISBN=\\"{0}\\"]",dgvBookInfo.CurrentRow.Cells[1].Value.ToString());3:XmlElement selectXe=(XmlElement)xe.SelectSingleNode(strPath);selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.4:selectXe.ParentNode.RemoveChild(selectXe);bookstore/book[@ISBN=\\"{0}\\"]"是一个Xpath表达式,找到ISBN号为所选那一行ISBN号的那本书,有关Xpath的知识请参考:XPath 语法1.4 修改某要条数据修改某 条数据的话,首先也是用Xpath表达式找到所需要修改的那一个结点,然后如果是元素的话,就直接对这个元素赋值,如果是属性的话,就用SetAttribute方法设置即可.如下:1:XmlElement xe=xmlDoc.DocumentElement;DocumentElement 获取xml文档对象的根XmlElement.2:string strPath=string.Format("/bookstore/book[@ISBN=\\"{0}\\"]",dgvBookInfo.CurrentRow.Cells[1].Value.ToString());3:XmlElement selectXe=(XmlElement)xe.SelectSingleNode(strPath);selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.4:selectXe.SetAttribute("Type",dgvBookInfo.CurrentRow.Cells[0].Value.ToString());也可以通过SetAttribute来增加一个属性 5:selectXe.GetElementsByTagName("title").Item(0).InnerText=dgvBookInfo.CurrentRow.Cells[2].Value.ToString();6:selectXe.GetElementsByTagName("author").Item(0).InnerText=dgvBookInfo.CurrentRow.Cells[3].Value.ToString();7:selectXe.GetElementsByTagName("price").Item(0).InnerText=dgvBookInfo.CurrentRow.Cells[4].Value.ToString();8:xmlDoc.Save(@".\\.\\Book.xml");2.使用XmlTextReader和XmlTextWriterXmlTextReader和XmlTextWriter是以流的形式来读写XML文件.2.1XmlTextReader使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的操作.如下:1:XmlTextReader reader=new XmlTextReader(@".\\.\\Book.xml");2:List modelList=new List();3:BookModel model=new BookModel();4:while(reader.Read())5:{ 6:7:if(reader.NodeType=XmlNodeType.Element)8:{ 9:if(reader.Name="book")10:{ 11:model.BookType=reader.GetAttribute(0);12:model.BookISBN=reader.GetAttribute(1);13:} 14:if(reader.Name="title")15:{ 16:model.BookName=reader.ReadElementString().Trim();17:} 18:if(reader.Name="author")19:{ 20:model.BookAuthor=reader.ReadElementString().Trim();21:} 22:if(reader.Name="price")23:{ 24:model.BookPrice=Convert.ToDouble(reader.ReadElementString().Trim());25:} 26:} 27:28:if(reader.NodeType=XmlNodeType.EndElement)29:{ 30:modelList.Add(model);31:model=new BookModel();32:} 33:34:35:} 36:modelList.RemoveAt(modelList.Count-1);37:this.dgvBookInfo.DataSource=modelList;关键是读取属性的时候,你要先知道哪一个结点具有几个属性,然后通过GetAttribute方法来读取.读取属性还可以用另外一种方法,就是用MoveToAttribute方法.可参见下面的代码:1:if(reader.Name="book")2:{ 3:for(int i=0;i;i+)4:{ 5:reader.MoveToAttribute(i);6:string str="属性:"+reader.Name+"="+reader.Value;7:} 8:model.BookType=reader.GetAttribute(0);9:model.BookISBN=reader.GetAttribute(1);10:}效果如下:2.2XmlTextWriterXmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它..内容来自www.179s.com请勿采集。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。本文《C#操作XML的问题》转载自cnblogs,版权归原作者所有,若侵权请联系:E-MAIL:513175919@qq.com
违法违规信息请立即联系本网可获得现金奖励,TEL:1-8-2-1-0-2-3-3-3-8-1(电话仅供违法违规信息举报,侵权类信息请EMAIL。)

www.179s.com false 互联网 http://www.179s.com/jsblogcnk/po/pohoky.html report 9281 三种方法:1,找一些读取XML的类库,定位到A那里,然后替换了2,如果格式固定的话,也可以直接分析字符串,但是毕竟麻烦:从前往后找<A>字符串,如果找到,把后面的冒号替换了,直到遇到</A>,然后再开始下一轮3,用正则表达式搜索,不过我没搞过,应该是可以的,你试试收获园豆:50============================================好的谢谢这有啥指导的?.net里有解析xml的东西,直接用起来解析就行了呗,这还咋指导

热门图片

经济金融企业管理法律法规社会民生科学教育降生活体育运动文化艺术电子数码电脑网络娱乐休闲行政地区心理分析医疗卫生