经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等
来源:互联网 发布:node cluster 编辑:程序博客网 时间:2024/04/28 19:33
经验总结]把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();
这些就是我这两天的心得。^_^
- 经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等
- 如何把一个Post过来的图片Base64编码转化为Stream
- 如何把一个Post过来的图片Base64编码转化为Stream
- 把inputstream转化为string
- 把一个数组活着list转化为一个table或者dataset的方法
- 【Java】把一个对象转化为String字符串
- c和c++如何把一个整数转化为string
- java 把 byte[] 数组转化为String
- stringstream把double转化为string
- java8 利用 stream,lambda 将一个数组转化为字符串String
- 把boolean的值转化为string类型
- 如何把一个CString转化为WCHAR*
- 一个把List<String>转化为以","隔开的字符串的方法
- C++/CLI 中字符串类型的转化: 把System::String转化为std::string
- C++/CLI 中字符串类型的转化: 把std::string转化为System::String
- 能把汉字转化为拼音的一个函数
- 能把汉字转化为拼音的一个函数
- 能把汉字转化为拼音的一个函数
- Sound play with stream
- 让我们自己来破解命运外挂999
- asp.net部分优化
- 参加SOA大赛初赛的总结
- 从和朋友的调侃中看C#和JAVA的区别
- 经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等
- 央行官员表示:跨行查询成本1.20元说法难确定
- 忘记Windows XP,Server2003密码的完美解决方法
- C++资源之不完全导引
- 在ASP.NET中实现AJAX
- 荒唐:跨行查询收费之专家理由
- ASP.NET中利用存储过程实现模糊查询
- [转]中国互联网怎么越来越流氓
- 驳忘记WindowsXP登录口令的解决方法