经验总结]把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

相关文章

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数