XML文件导入、导出到 DataSet

简介:

//导出dataset数据到XML文件

//Author:Quietwalk

//2010-09-09

 public bool ExportToXMl(DataSet ds, string strXMLPath)

 {

      //DirectoryInfo mobileDir = new DirectoryInfo(strXMLPath);

      FileInfo XMLfile = new FileInfo(strXMLPath);

      bool bReturnValue = false;

 

      try

      {

          if (ds != null && ds.Tables.Count > 0 && XMLfile.Exists)

          {

              ds.WriteXml(strXMLPath, XmlWriteMode.WriteSchema);

              bReturnValue = true;

          }

     

      }

      catch(SqlCeException ex)

      {

          throw(ex);

      }

 

      return bReturnValue;

     

 }

 

 //XML 数据导入到 DataSet中

//Author:Quietwalk

//2010-09-09

 public DataSet ImportFromXml(string fromPath)

 {

      FileInfo xmlFile = new FileInfo(fromPath);

      DataSet dsXML =null;

 

      if (xmlFile.Exists)

      {

          FileStream fsReadXml = new FileStream(fromPath, FileMode.Open);

          XmlTextReader myXmlReader = new XmlTextReader(fsReadXml);

          dsXML=new DataSet ();

 

          dsXML.ReadXml(myXmlReader);

          myXmlReader.Close();

 

 

      }

 

      return dsXML;

 

 }

 

说明:

 

 

 

DateSet.ReadXML()

ReadXML缺省使用XmlReadMode.Auto方式读取,这就给大数据量留下了低效率的伏笔。因为如果XML没有SchemeDataSet就会自己推算XML的结构,然后再加载,这就是低效的主要原因。让DataSet推算不让我们帮他算,因为DataSet已经提供了一个ReadXmlSchema方法。

 

dataset是这样存储的:table(0)中存放feature层的信息,包括fno等属性,只有一行;
table(1)
中包括attribute的信息包括ano等属性,有两行。如果attribute下还有其他子层,就依次放在table(2)..中。 dataset读取数据之后,可以与datagrid绑定进行显示,绑定时可以针对dataset中的单个表,也可以一次绑定所有表。

 

1. 载入 xml 文件的格式要求

a. 不可以读取空的文件.
如果使用 DataSet.ReadXml 载入一个空的文件将出现异常因为没有根元素.

b. 可以读取没有 <?xml?> 头的 xml 文件.
你的 xml 文件可以不包含 <?xml version="1.0" encoding="utf-8" ?> 这样的代码.

2. xml 文件的编码格式

a. <?xml?> 头中标记的编码最好和文件自身的编码一致.
在测试文件中我使用 utf-32 存储标记为 utf-8  xml 文件或者反过来都导致了 DataSet 读取文件异常.虽然我并没有对所有的编码进行测试而且用 ASCII 存储标记为 utf-8  xml 读取不会出现异常只不过中文可能会出现乱码最好还是保持编码一致吧.

b. 采用 ASCII 存储 xml 文件可能出现中文乱码.
xml 
自身是不支持 ASCII 虽然读取没有异常但你读取的信息可能是一堆"?".

3. XmlReadMode 参数对 DataSet 读取 xml 文件的影响

a. 非典型 DataSet 如果包含架构并使用默认的 XmlReadMode.Auto 或者忽略此选项将只载入 xml 文件中符合架构的数据.
如果你的数据集中包含了架构信息例如定义了 S1, T1(Name string, Age int), Student(Name string, Age int), Teacher 4 个表数据集名称为 TestDS, 命名空间为 http://tempuri.org/TestDS.xsd如果一个的 xml文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<TestDS xmlns="http://tempuri.org/TestDS.xsd">
  <Student>
    <Name>
小明</Name>
    <Age>12</Age>
  </Student>
  <Teacher>
    <Name>
王老师</Name>
    <Age>32</Age>
  </Teacher>
  <Room>
    <ID>123</ID>
  </Room>
</TestDS>

使用 DataSet.ReadXml 读取此 xml 文件时第一个 Student 被读取到 DataSet  Student 表中因为 xml Student 对应的列名数据类型和 DataSet 架构一致第二个 Teacher 不会被读取, DataSet 架构中虽然包含了表 Teacher, 但并没有定义任何的列 xml 中的 Teacher 包含了 Name, Age 两个列第三个Room 不会被读取因为架构中不包含表 Room. 以上是针对非典型 DataSet 测试的结果典型 DataSet 应该也是如此有兴趣的朋友可以自己测试一下.

b. 非典型 DataSet 如果不包含架构并使用默认的 XmlReadMode.Auto 或者忽略此选项将分析并采用xml 文件的架构.
如果仅仅使用 new 创建了一个非典型 DataSet, 那么 DataSet 中尚未包含架构如果一个的 xml 文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<TestDS xmlns="http://tempuri.org/TestDS.xsd">
  <Room>
    <ID>123</ID>
  </Room>
  <Room>
    <ID>123</ID>
    <Name>
储藏室</Name>
  </Room>
</TestDS>

 DataSet 读取 xml 文件时将分析数据集名称命名空间并针对每一条数据进行架构分析我想这一点很重要正如上面的文件中当读取到第一个 Room 分析得到需要 Room(ID) 这样的表读取第二个Room 会发现 Room 表的架构信息已经存在经过对比发现需要变更架构为 Room(ID, Name). 每一条数据除了架构分析以外还要进行可能的架构更改工作因此在效率上可能不及 a 中说到的情况.

c. 对于 XmlReadMode 的其余选项似乎并不用于 ReadXml 方法或者没有实际效果.

4. 载入 xml 字符串, byte[] 数组到 DataSet

a. 使用 DataSet.ReadXml(new StringReader(string)) 可以将 xml 字符串载入到 DataSet.
xml 
字符串应该是合法的如果在字符串的 <?xml?> 头中指定 encoding, 那么指定任何编码都可以读取中文字符也就是说指定对于载入是没有作用的.

b. 使用 DataSet.ReadXml(new MemoryStream(byte[])) 可以将 byte[] 数组表示的 xml 载入到 DataSet.
对于编码载入 byte[] 数组和载入文件的要求是类似的<?xml?> 头中标记的编码应该和 byte[] 数组的编码一致最好不要采用 ASCII, 原因在上文中已经提到使用 Encoding.GetBytes 方法将字符串转化为byte[] 数组时编码应该对照如果使用 Encoding.UTF8.GetBytes, 那么字符串中 <?xml?> 头应该标记uft-8, 另外也可以不标记 encoding, 结果是相同的.



http://www.cnblogs.com/quietwalk/archive/2010/09/09/1822192.html

本文转自程序猿博客51CTO博客,原文链接http://blog.51cto.com/haihuiwei/1655861如需转载请自行联系原作者


365850153

相关文章
|
3月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
86 1
|
2月前
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
31 2
|
2月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
180 8
|
3月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
33 3
|
3月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
128 0
|
5月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
7月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
|
7月前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
|
3月前
|
XML 存储 Web App开发
查看 XML 文件
查看 XML 文件
|
4月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
75 1