经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等
2006-06-30 22:29
706 查看
经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等
昨天写的有问题,其实原来是同事的一个问题,同事想把一个从别处获得的string,转化成dataset,并且这个string是xml结构的,所以解决就有2种:
1.直接用XML解析这个xml string,一个结点一个结点的解析,构建一个datatable,各个cloumn,构建一个个的datarow,呵呵,同事写了一个好长的方法。先构造出一个个的column,然后再重新读这个字符串,解析各个结点,填充这个datatable.方法至少是比较麻烦,但效果是不是好,不是太清楚。
2.因为string是xml格式的,而dataset有一个readXml()方法,可以把xml转化为dataset,dataset的readxml需要的参数中没有直接是一个string,但有stream,XmlReader,string(here is filepath),TextReader,这里不可能用string了,因为不可能先写一个临时文件再读进来,再删了,过于麻烦。
其它的方法,就是获得stream或reader了。
如何从一个string得到一个stream.
原理我有:就是先构建一个Stream,然后构建一个基于stream的streamwriter,然后用这个streamwriter往这个stream写这个xml的string,这样就构造了一个stream.
因为可直接构造的stream,只有派生的memorystream,所以就用了memorystream.但我发现,这个方法根本不可用,但我调试跟踪的时候却实实在在的发现里面有值。但用streamreader之类的却读不出来值。晕!最后在CSDN上发了一个帖子,才发现原因,这里在stream里有一个类似handle的概念,在我用streamwriter的时候,这个读写指针所在的位置就已经不是在开始的位置了,所以读的时候,就会从现在的位置开始,故读取的只是这个位置之后的,所以就为空了。解决现在如下:
另一种解决方法是我在查了N多的MSDN才找到的。可以在ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemxmlxmltextreaderclassctortopic.htm里找到
用于从字符串转化为XML片段,然后从中得到DATASET,完成数据绑定。实现过程如下:
而在实际应用中,可以直接用如下语句来达到效果。
通过上面的两个方法,然后再用下面的方法就可以了。
这些就是我这两天的心得。^_^
昨天写的有问题,其实原来是同事的一个问题,同事想把一个从别处获得的string,转化成dataset,并且这个string是xml结构的,所以解决就有2种:
1.直接用XML解析这个xml string,一个结点一个结点的解析,构建一个datatable,各个cloumn,构建一个个的datarow,呵呵,同事写了一个好长的方法。先构造出一个个的column,然后再重新读这个字符串,解析各个结点,填充这个datatable.方法至少是比较麻烦,但效果是不是好,不是太清楚。
2.因为string是xml格式的,而dataset有一个readXml()方法,可以把xml转化为dataset,dataset的readxml需要的参数中没有直接是一个string,但有stream,XmlReader,string(here is filepath),TextReader,这里不可能用string了,因为不可能先写一个临时文件再读进来,再删了,过于麻烦。
其它的方法,就是获得stream或reader了。
如何从一个string得到一个stream.
原理我有:就是先构建一个Stream,然后构建一个基于stream的streamwriter,然后用这个streamwriter往这个stream写这个xml的string,这样就构造了一个stream.
因为可直接构造的stream,只有派生的memorystream,所以就用了memorystream.但我发现,这个方法根本不可用,但我调试跟踪的时候却实实在在的发现里面有值。但用streamreader之类的却读不出来值。晕!最后在CSDN上发了一个帖子,才发现原因,这里在stream里有一个类似handle的概念,在我用streamwriter的时候,这个读写指针所在的位置就已经不是在开始的位置了,所以读的时候,就会从现在的位置开始,故读取的只是这个位置之后的,所以就为空了。解决现在如下:
MemoryStream ms=new MemoryStream(); StreamWeader sw=new StreamWeader(ms); sw.Write("tavorunknown2004-01-02"); sw.Flush(); sw.Position=0;//这个是关键的,也是我刚才出错的地方。 DataSet ds=new DataSet(); ds.ReadXml(ms); ...................
另一种解决方法是我在查了N多的MSDN才找到的。可以在ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemxmlxmltextreaderclassctortopic.htm里找到
用于从字符串转化为XML片段,然后从中得到DATASET,完成数据绑定。实现过程如下:
string xmlFrag =" " + "" + "novel" + "" //Create the XmlNamespaceManager. NameTable nt = new NameTable(); XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt); nsmgr.AddNamespace("bk", "urn:sample"); //Create the XmlParserContext. XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); //Create the reader. XmlTextReader reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context); DataSet ds; ds.ReadXml(reader); this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind();
而在实际应用中,可以直接用如下语句来达到效果。
string myxml;//一个已有值的XML字符串 XmlParserContect context=new XmlParserContext(null,null,null,XmpSpace.None); XmlTextReader reader=new XmlTextReader(myxml,XmlNodeType.Element,context); DataSet ds; ds.ReadXml(reader);
通过上面的两个方法,然后再用下面的方法就可以了。
this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind();
这些就是我这两天的心得。^_^
相关文章推荐
- java8 利用 stream,lambda 将一个数组转化为字符串String
- stringstream的一个空格引起的错误
- 同一个项目的不同的项目工作经验总结
- 网络流进行转化(String转化,直接写入文件)
- 同一个项目的不同的项目工作经验总结--程序员乙
- 项目管理心得:一个项目经理的个人体会、经验总结
- 项目管理心得:一个项目经理的个人体会、经验总结
- asp.net下DataSet.WriteXml(String)与(Stream)的区别
- JSON.stringify()之用----就是用来把对象转化成字符串的以便alert弹出来
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、...
- 一个项目经理经验总结-转载
- 同一个项目的不同的项目工作经验总结--程序员甲
- string和stringstream+setw()用法总结
- 一个电商数据分析师的经验总结
- 同一个项目的不同的项目工作经验总结--程序员乙
- 一个老IT产品管理者对于产品经理工作的经验总结
- 提供将一个Activity转化为View显示出来
- 项目管理心得:一个项目经理的个人体会、经验总结
- 自己总结出来的东西还是得谨慎
- 三十几岁才总结出来的15条家庭消费经验