经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等

本文主要是介绍经验总结]把string转化为stream,把一个xmlstring片断转化为dataset,导致写入stream的东西读不出来等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经验总结]把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的时候,这个读写指针所在的位置就已经不是在开始的位置了,所以读的时候,就会从现在的位置开始,故读取的只是这个位置之后的,所以就为空了。解决现在如下:
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的东西读不出来等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825186

相关文章

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

如何将二进制文件流转化为MockMultipartFile文件

《如何将二进制文件流转化为MockMultipartFile文件》文章主要介绍了如何使用Spring框架中的MockMultipartFile类来模拟文件上传,并处理上传逻辑,包括获取二进制文件流、创... 目录一、名词解释及业务解释1.具体业务流程2.转换对象解释1. MockMultipartFile2

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型