文档库 最新最全的文档下载
当前位置:文档库 › xml序列化集合

xml序列化集合

xml序列化集合
xml序列化集合

https://www.wendangku.net/doc/cd18018506.html,/clj_0609/blog/static/176485862008317573178

0/

xml序列化集合

学习2008-04-01 07:57:31 阅读173 评论0 字号:大中小

Xml序列化是将对象中的字段和值序列化为Xml流,保存为Xml文件的格式。反序列化是将类从Xml流中读出。

主要用到的类为:XmlSerializer,它的主要方法有Serialize和Deserialize,用来序列化和反序列化Xml。XmlSerializer 构造函数中的参数Type type,用来表示要进行序列化的类的类型,可以通过typeof(类名)来获取。Serialize有两个参数Stream stream和Object o,分别表示序列化的流和要序列化的对象。Deserialize有一个参数Stream stream表示要反序列化的流。

可以用属性来控制Xml的序列化,XmlAttribute属性表示对象成员序列化为Xml属性,

XmlElement 属性表示要将成员序列化为Xml元素,XmlArray属性应用于数组成员,数组的成员将成为Xml数组的成员。XmlRoot属性表示要序列化为Xml 的根元素。在这些属性中都可以进一步制定元素的名称,是否为空等。XmlRoot属性中还可以制定命名空间。

[XmlArray(ElementName = "Items")]

[XmlElement(IsNullable = false)]

[XmlRoot(ElementName="PurchaseOrder",Namespace = “https://www.wendangku.net/doc/cd18018506.html,”)]

[XmlAttribute]

Xml序列化这个东西挺搞人的,当你的Class里有Hashtable这样的东西的时候,在序列化的时候,在

XmlSerializer serialize = new XmlSerializer(typeof(myClass));

这一句上会出来一个“反射类型时出错”的错误。其实就是那个Hashtable在搞鬼,直接把上面一句换成

XmlSerializer serialize = new XmlSerializer(typeof(Hashtable));

罪魁祸首就出来了。这次是:“不支持类型System.Collections.Hashtable,因为它实现

IDictionary”。原来Xml序列化时对集合类还有一些比较特殊的要求。

那先来看一个可以正常序列化的集合类――Arraylist:

serialize = new XmlSerializer(typeof(ArrayList));

在序列化过程中临时生成的文件中可以发现如下的语句:

WriteStartElement(@"ArrayOfAnyType", @"");

for (int ia = 0; ia < a.Count; ia++) {

Write1_Object(@"anyType", @"", ((System.Object)a[ia]), true, false);

}

WriteEndElement();

对于集合类,在Xml序列化过程中都是要如上所述来写Xml的,显然的,对于实现了IDictionary 接口的集合来讲,上面那个for循环是走不通的。因为对于IDictionary来讲Item属性(也就是C#里的[]这个东西,也叫索引器,名字反正有点乱啦)是这样定义的:

[C#]

object this[

object key

] {get; set;} object this[

object key

] {get; set;}

上面是从结果上看,猜想最终序列化的时候,集合类是要以上面那样的循环方式进行序列化的,而实现了IDictionary接口的类对于那样的方式是不灵的,所以在生成临时文件的时候就不让它生成了,反正生成的DLL也是无法运行的,直接一个异常出来了。

其实在SDK上可以查到,关于Xml序列化有这么一段:

XmlSerializer 可以以不同方式处理实现IEnumerable 或ICollection 的类(条件是这些类满足某些要求)。实现IEnumerable 的类必须实现带单个参数的公共Add 方法。Add 方法的参数必须与从GetEnumerator 方法返回的IEnumerator.Current 属性所返回的类型一致(多态)。除实现IEnumerable 外还实现ICollection 的类(如CollectionBase)必须有一个取整数的公共Item 索引属性(在C# 中为索引器),并且它必须有一个整数类型的公共Count 属性。传递给Add 方法的参数必须与从Item 属性返回的类型相同或与该类型的某个基的类型相同。对于实现ICollection 的类,要序列化的值将从索引Item 属性检索,而不是通过调用GetEnumerator 来检索。另外请注意,除返回另一个集合类(实现ICollection 的集合类)的公共字段之外,将不序列化公共字段和属性。

无法满足上述条件的都会抛出相应的异常,而实现了IDictionary接口的类显然是无法满足的,.Net 在实现的时候,一开始就先判断是不是实现了IDictionary接口,发现实现了这个接口的直接就出来了,下面什么Add方法、Item属性呀都不管了。

还有一点,就是

l 类(Class这一级)――包括集合类与非集合,

l 非集合类需要序列化的属性里的访问方法(不用序列化的属性例外),

l 在集合类里,上面提到过的Add方法,Item属性、Count属性、Current属性的访问方法等,

如果有过SecurityAttribute声明的也是无法序列化的。不过现在写代码那个SecurityAttribute用得是甚少――这个方面的东西除了照例子依样画葫芦过一下在实践中根本是没有涉足。

要序列化Hashtable其实就只是少一个整数类型的Item属性而已,在这上面是没有什么办法了。想到SortedList这个东西很多方面跟Hashtable差不多,不过它还能依序取得集合中的元素,只是用的不是整数类型的Item属性,而是用GetByIndex()方法。所以就用它来偷梁换柱一下了。

// [EnvironmentPermission(SecurityAction.Assert)]

public class MyCollection : ICollection {

private SortedList list = new SortedList();

public MyCollection () {

}

// [EnvironmentPermission(SecurityAction.Assert)] public void Add(Item item) {

list.Add(item.ID,item);

}

public Item this[int index] {

get {return (Item)list.GetByIndex(index);} }

ICollection 成员#region ICollection 成员

public bool IsSynchronized {

get {

return false;

}

}

public int Count {

get {

return list.Count;

}

}

[EnvironmentPermission(SecurityAction.Assert)] public void CopyTo(Array array, int index) {

list.CopyTo(array,index);

}

public object SyncRoot {

get {

return this;

}

}

#endregion

IEnumerable 成员#region IEnumerable 成员

public IEnumerator GetEnumerator() {

return list.GetEnumerator();

}

#endregion

}

Item是自定义的一个类。没什么具体的意义。

这样偷一下,上面的这个MyCollection类就是可以被序列化的了,然后把SortedList其他属性包一下,就基本可以当成一个SortedList使用了,说它是Hashtable也差不多吧――外表基本看不出来。

不过局限性还是有喽。它的Add方法的参数,与Item属性的类型必须是强类型的,不能用Objcet。用Object类型,临时文件是可以生成,serialize = new XmlSerializer(typeof(Myclass)); 这一句是可以通过没异常了。但真正序列化的时候,除非是一些基本的数据类型,否则它不知道如何去把那个类型写成相应的String,写Xml文件就出错了。

附加一些冗于的资料:

1 /**////

2 /// 序列化类。

3 ///

4 public class Serializer

5 {

6 //防止被实例化。

7 private Serializer()

8 {

9

10 }

11 /**////

12 /// 静态构造函数仅在设置CanBinarySerialize值中使用一次。

13 ///

14 static Serializer()

15 {

16 SecurityPermission sp = new

SecurityPermission(SecurityPermissionFlag.SerializationFormatter);

17 try

18 {

19 sp.Demand();

20 CanBinarySerialize = true;

21 }

22 catch (SecurityException)

23 {

24 CanBinarySerialize = false;

25 }

26 }

27 /**////

28 /// 获取二进制序列化是否被使用。

29 ///

30 public static readonly bool CanBinarySerialize;

31 /**////

32 /// 将对象转化成二进制的数组。

33 ///

34 /// 用于转化的对象。

35 /// 返回转化后的数组,如果CanBinarySerialize为false则返回null。

36 public static byte[] ConvertToBytes(object objectToConvert)

37 {

38 byte[] byteArray = null;

39

40 if (CanBinarySerialize)

41 {

42 BinaryFormatter binaryFormatter = new BinaryFormatter();

43 using (MemoryStream ms = new MemoryStream())

44 {

45

46 binaryFormatter.Serialize(ms, objectToConvert);

47 //设置是内存存储位置为0。

48 ms.Position = 0;

49 //读取数组。

50 byteArray = new Byte[ms.Length];

51 ms.Read(byteArray, 0, byteArray.Length);

52 ms.Close();

53 }

54 }

55 return byteArray;

56 }

57 /**////

58 /// 将对象以二进制形式存储到硬盘中。

59 ///

60 /// 用于保存的对象。

61 /// 文件路径。

62 /// 如果存储成功则返回true,否则返回false。

63 public static bool SaveAsBinary(object objectToSave, string path)

64 {

65 if (objectToSave != null && CanBinarySerialize)

66 {

67 byte[] ba = ConvertToBytes(objectToSave);

68 if (ba != null)

69 {

70 using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))

71 {

72 using (BinaryWriter bw = new BinaryWriter(fs))

73 {

74 bw.Write(ba);

75 return true;

76 }

77 }

78 }

79 }

80 return false;

81 }

82 /**////

83 ///将对象转化为Xml格式文件,该对象必须用[Serialize]标记,否则将抛出错误。

84 ///

85 /// 用于序列化的标记。

86 /// 返回Xml文本,如果对象为空则返回null。

87 public static string ConvertToString(object objectToConvert)

88 {

89 string Xml = null;

90

91 if (objectToConvert != null)

92 {

93 //获取当前序列化对象。

94 Type t = objectToConvert.GetType();

95

96 XmlSerializer ser = new XmlSerializer(t);

97 //将序列化的结果保存到Xml中。

98 using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))

99 {

100 ser.Serialize(writer, objectToConvert);

101 Xml = writer.ToString();

102 writer.Close();

103 }

104 }

105

106 return Xml;

107 }

108 /**////

109 /// 将对象序列化后以Xml格式存储于文件中。

110 ///

111 /// 用于序列化的对象。

112 /// 用于存储的文件路径。

113 public static void SaveAsXml(object objectToConvert, string path)

114 {

115 if (objectToConvert != null)

116 {

117 Type t = objectToConvert.GetType();

118

119 XmlSerializer ser = new XmlSerializer(t);

120

121 using (StreamWriter writer = new StreamWriter(path))

122 {

123 ser.Serialize(writer, objectToConvert);

124 writer.Close();

125 }

126 }

127

128 }

129 /**////

130 /// 将一个二进制的数组转化为对象,必须通过类型转化自己想得到的相应对象。如果数

组为空则返回空。

131 ///

132 /// 用于转化的二进制数组。

133 /// 返回转化后的对象实例,如果数组为空,则返回空对象。 134 public static object ConvertToObject(byte[] byteArray)

135 {

136 object convertedObject = null;

137 if (CanBinarySerialize && byteArray != null && byteArray.Length > 0)

138 {

139 BinaryFormatter binaryFormatter = new BinaryFormatter();

140 using (MemoryStream ms = new MemoryStream())

141 {

142 ms.Write(byteArray, 0, byteArray.Length);

143

144 ms.Position = 0;

145

146 if (byteArray.Length > 4)

147 convertedObject = binaryFormatter.Deserialize(ms);

148

149 ms.Close();

150 }

151 }

152 return convertedObject;

153 }

154 /**////

155 /// 将文件的数据转化为对象。

156 ///

157 /// 文件路径。

158 /// 希望得到的对象。

159 /// 返回反序列化的对象。

160 public static object ConvertFileToObject(string path, Type objectType)

161 {

162 object convertedObject = null;

163

164 if (path != null && path.Length > 0)

165 {

166 using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) 167 {

168 XmlSerializer ser = new XmlSerializer(objectType);

169 convertedObject = ser.Deserialize(fs);

170 fs.Close();

171 }

172 }

173 return convertedObject;

174 }

175 /**////

176 /// 将Xml格式的字符串反序列化为实例对象。

177 ///

178 /// Xml格式字符串。

179 /// 反序列化后所期望的对象。

180 /// 反序列化后所期望的对象,如果字符串为空,则返回空对象。 181 public static object ConvertToObject(string Xml, Type objectType)

182 {

183 object convertedObject = null;

184

185 if (!WebHelper.IsNullOrEmpty(Xml))

186 {

187 using (StringReader reader = new StringReader(Xml))

188 {

189 XmlSerializer ser = new XmlSerializer(objectType);

190 convertedObject = ser.Deserialize(reader);

191 reader.Close();

192 }

193 }

194 return convertedObject;

195 }

196 /**////

197 /// 将Xml节点反序列化为实例对象。

198 ///

199 /// 用于反序列化的Xml节点。

200 /// 反序列化后所期望的对象。

201 /// 反序列化后所期望的对象,如果字符串为空,则返回空对象。 202 public static object ConvertToObject(XmlNode node, Type objectType)

203 {

204 object convertedObject = null;

205

206 if (node != null)

207 {

208 using (StringReader reader = new StringReader(node.OuterXml))

209 {

210

211 XmlSerializer ser = new XmlSerializer(objectType);

212

213 convertedObject = ser.Deserialize(reader);

214

215 reader.Close();

216 }

217 }

218 return convertedObject;

219 }

220 /**////

221 /// 加载一个二进制文件并将其转化为实例对象。

223 /// 文件路径。

224 /// 返回转化后的实例对象。

225 public static object LoadBinaryFile(string path)

226 {

227 if (!File.Exists(path))

228 return null;

229

230 using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))

231 {

232 BinaryReader br = new BinaryReader(fs);

233 byte[] ba = new byte[fs.Length];

234 br.Read(ba, 0, (int)fs.Length);

235 return ConvertToObject(ba);

236 }

237 }

238 /**////

239 /// 将字符串序列化

cref="https://www.wendangku.net/doc/cd18018506.html,ValueCollection"/>类型,第一个为键,第二位与其相对应的值。

240 ///

241 /// NameValueCollection中的keys键。

242 /// NameValueCollection中的keys键对应的value。

243 /// 基于key-value格式的NameValeCollection集合对象。

245 /// string keys = "key1:S:0:3:key2:S:3:2:";

246 /// string values = "12345";

247 /// 则这个所得的NameValueCollection结果中包含两个键(key1和key2),他们所对应的值分别为(123和45)。

248 /// 其中:"key1:S:0:3"的key1表示键,S表示字符类型,0表示values起始的位置,3表示values结束的位置。

249 ///

250 public static NameValueCollection ConvertToNameValueCollection(string keys, string values)

251 {

252 NameValueCollection nvc = new NameValueCollection();

253

254 if (keys != null && values != null && keys.Length > 0 && values.Length > 0)

255 {

256 char[] splitter = new char[1] { ':' };

257 string[] keyNames = keys.Split(splitter);

258

259 for (int i = 0; i < (keyNames.Length / 4); i++)

260 {

261 int start = int.Parse(keyNames[(i * 4) + 2], CultureInfo.InvariantCulture);

262 int len = int.Parse(keyNames[(i * 4) + 3], CultureInfo.InvariantCulture);

263 string key = keyNames[i * 4];

264

265 //Future version will support more complex types

266 if (((keyNames[(i * 4) + 1] == "S") && (start >= 0)) && (len > 0) &&

(values.Length >= (start + len)))

267 {

268 nvc[key] = values.Substring(start, len);

269 }

270 }

271 }

272

273 return nvc;

274 }

275 /**////

276 /// 基于NameValueCollection对象序列化成keys和values的字符串。

277 ///

278 /// 用于序列化的NameValueCollection对象。

279 /// ref格式的参数keys将转化为NameValueCollection中的key。

280 /// ref格式的参数values将转化为NameValueCollection中的value。

281 public static void ConvertFromNameValueCollection(NameValueCollection nvc, ref string keys, ref string values)

282 {

283 if (nvc == null || nvc.Count == 0)

284 return;

285

286 StringBuilder sbKey = new StringBuilder();

287 StringBuilder sbValue = new StringBuilder();

288

289 int index = 0;

290 foreach (string key in nvc.AllKeys)

291 {

292 if (key.IndexOf(':') != -1)

293 throw new ArgumentException("ExtendedAttributes Key can not contain the character \":\"");

294

295 string v = nvc[key];

296 if (!WebHelper.IsNullOrEmpty(v))

297 {

298 sbKey.AppendFormat("{0}:S:{1}:{2}:", key, index, v.Length);

299 sbValue.Append(v);

300 index += v.Length;

301 }

302 }

303 keys = sbKey.ToString();

304 values = sbValue.ToString();

305 }

306 }

在SiteSettings.cs中可以发现有些属性加有[XmlIgnore]标记,这是在序列化和反序列化时对该属性都不起作用,如SettingsID等在数据库中都已经存在字段名。从代码中我们可以看到,将一个

NameValueCollection集合序列化和反序列化,其实键和值对存储在一个结构中,这个结构就是:

1 public struct SerializerData

2 {

3 /**////

4 /// 序列化NameValueCollection集合时用于保存Keys的字符串。

5 ///

6 public string Keys;

7 /**////

8 /// 序列化NameValueCollection集合时用于保存Values的字符串。

9 ///

10 public string Values;

11 }

标题: 对象数组的XML序列化

- 生命体验之kevin-Y 2009-11-13 10:31 阅读:135

- 评论:0 | 添加评论 | 返回↓

对象数组序列化不是什么难的东西,只是一直想弄懂XmlAttributeOverrides 的知识,于是想起了这个东东。以下对象数组

object[] objs = new object[] { 1, "2222", 33 };

XML序列化结果是

1

2222

33

使用以下方法序列化

XML与SQL数据库

龙源期刊网 https://www.wendangku.net/doc/cd18018506.html, XML与SQL数据库 作者:刘立平 来源:《数字技术与应用》2015年第07期 摘要:XML的核心是描述数据的组织结构,它可以作为数据交换的标准格式。SQL数据库在数据查询、修改、保存、安全等方面具有其他数据处理手段无法替代的地位。一个系统获得一个XML文件后,可能需要将XML中的某些标记包含的文本内容转化为数据库中表的一条记录;另一方面,一个应用系统可能需要将数据库表中的某些记录转化为一个XML文件,以便与其他系统交互数据,发挥XML文件在数据交换上的优势。 关键词:XML SQL数据库数据交换 中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2015)07-0000-00 1 XML XML(eXtensible Markup Language)是可扩展标记语言,XML是由万维网联盟定义的一种语言,是表示结构化数据的行业标准。它使得Internet上的数据相互交流更加方便,让文件的内容更加显而易懂。XML不仅提供了直接在数据上工作的通用方法,还可以将用户界面和结构化数据相分离,允许不同来源的数据的无缝集成和对同一数据的多种处理。XML包括一系列相关技术,其中主要内容有:规范的XML、有效的XML文件、XML与CSS、XML与XSL、基于DOM的解析器、XML Schema模式、XML与数据库等等知识。 2数据库 数据库(DataBase,简称DB)是存放数据的仓库,是为了满足某一部门中多个用户的多种应用的需要,安装一定的数据模型在计算机中组织、存储和使用的相互联系的数据集合。数据库系统就是管理大量的、持久的、可靠的和共享的数据的工具。 数据库管理系统软件的种类有很多,但常用的也就那么三五种:ORACLE、My SQL、ACCESS、MS SQL Server这些是不同领域常用的数据库管理系统软件。其中ORACLE和MS SQL Server最为常见,这里以MS SQL Server为例, SQL server数据库是美国微软公司发布的一款RMDBS数据库,也就是关系型数据库系统。SQL server的优点为: (1)真正的客户服务器体系结构。 (2)图形化用户界面,更加直观、简单。 (3)丰富的编程接口工具,为用户进行程序设计提供更多选择余地。

XML与关系数据库

XML与关系数据库 前面我们讲到了XML的数据存取机制,从一个较高的层面上分析了数据存取的多种方式。作为其中的一种,数据库的数据存取机制似乎倍受青睐,但我们并未对此作比较深入的探讨,这一节里我们对XML与数据库的关系进行更进一步的详细分析。 我们知道,关系数据库提供了对于大批量数据的有效存储管理和快速信息检索、查询的功能。从体系结构上看,数据库技术的发展历经了网络型数据库、层次型数据库、关系数据库、面向对象数据库。虽然面向对象数据库融入了面向对象技术,但是到目前为止,在各个领域使用最广的还是关系数据库。关系数据库管理系统(RDBMS)采用二维表格作为存储数据的模型,如下图10-1所示, 字段字段字段 行 行 行 行 图10-1 关系数据库二维表 表格由行和列组成,一般情况下,列被称作“字段”,用于表示组成数据有效信息的属性,而行则用于指示一条完整的数据记录。由于数据间的相关性可以通过表与表之间关键字(外键)来关联,由此产生了“关系”类型数据库的由来。 关系数据库有自己的查询语言——结构化查询语言(Structured Query Languag e,SQL)。SQL最初由IBM提出,后经不断发展,已于1986年成为业界标准并被广泛采用。SQL 是非过程性的。当SQL语句传送到数据库服务器后,服务器返回满足条件的结果或结果集(视具体查询项目而定)。一般情况下,大多数支持SQL 的服务器系统均采用客户/服务器架构,现在又发展到更为先进的分布式处理架构。这样一来,SQL服务器既可以接收客户应用程序发送的查询请求,也可以接收其他服务器的查询请求,这些服务器可能是其他SQL服务器,也可以是XML服务器。 就数据存储而言,关系型数据库已经是相当成熟的应用,从80年代商用产品出现至今,早已深入企业储存及数据应用的核心。相较之下,XML部分技术尚且在发展阶段。关系型数据库是透过详细定义和控制结构化数据的方式,达到数据增、删、查询的目的。因此它是以字段数据型态的精确定义,将数据以列的方式一笔笔储存,再透过数据表之间的互相关联,建构出数据和数据结合后的复杂结果,因此

XML与数据库的数据转换

实验三:XML 与数据库的数据转换 1实验学时 2 学时 2实验目的 理解 XML 与数据库之间的转换方式 在项目实践中综合各种知识的运用 3实验内容 采用 Eclipse IDE(或 MyEclipse) 建立一个 Java 项目 利用 MySQL 及其图形界面工具建立一个数据库 利用 JDBC 建立其和数据库的连接 编写 XML 文件和处理类以完成 XML 文件和数据库之间的 数据转换 4实验代码 import javax.xml.transform.*; import javax.xml.transform.stream.*; import javax.xml.transform.dom.*; import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; import java.sql.*; public class DatabaseToXML { // MySQL的JDBC连接jar包位置是D:\mysql-connector-java-5.1.19-bin.jar // 数据库名称为:xmllab // 表名是:person,表中的字段及属性请查阅ppt文档 // 用户名是:root // 密码是:root public static void main(String args[]) { Connection con; Statement sql; ResultSet rs; // 为ppt文档中的图示中的表增加一个字段id,用于MySQL自增量计算 Integer[] id = {}; String[] number = { "" }; String[] name = { "" }; String[] date = { "" }; String[] salary = { "" }; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) {

XML与关系数据库之间的转换

摘要: 随着XML数据的日益增多,XML已经成为了互联网上数据表示和数据交换的标准格式。同时也涌现出大量的XML数据存储方法,比较有代表性的有XML专用数据库存储、面向对象数据库存储、关系数据库存储等。由于关系数据库的大力发展、广泛应用和其成熟的技术,在存储管理XML的各种可能的方式中,基于关系数据库的XML数据存储成为一种可行而有前景的方式,受到了广泛的关注。 由于关系数据库的二维平面关系表结构与XML的层次结构有很大差异,怎样在关系数据库中有效地存储XML文档,同时又能保持其结构信息和文档信息成为一个难题。为了解决这一难题,使得XML模式与关系模式之间的映射问题,成为XML 文档的关系化存储技术的核心问题。 本文主要探讨了XML与数据库映射的方法。

目录 第一章前言 (1) 第二章XML技术 (3) .2.1XML的特点 (3) .2.2XML的应用分析 (4) 2.3.1DTD (5) 2.3.2XML Schema (6) 2.4XML解析技术 (7) 2.4.1 SAX (8) 2.4.2.DOM (8) 2.4.3.DOM与SAX比较 (9) 第三章XML与数据库技术 (10) 3.1 XML是数据库吗? (10) 3.2 数据和文档的对比 (10) 3.2.1 以数据为中心的文件 (11) 3.2.2 以文档为中心的文件 (11) 3.2.3 数据、文档和数据库 (11) 第四章XML与关系数据库的转换 (13) 4.1边模型映射法 (13) 4.2结点模型映射法 (16) 第五章结束语 (19) 第六章致谢 (20)

第一章前言 近年来,互联网得到了迅猛发展,它提供了全球范围的网络互联与通信功能,其丰富的信息资源给人们的学习和生活带来了极大的便利。作为互联网最主要应用的Web实际上已成为最大的信息资源库。电子商务、电子出版、远程教育等基于Web 的新兴领域的全面兴起使得传统的Web资源更加复杂化和多样化。人们对Web服务功能的需求也达到更高的标准,如用户需要对Web进行智能化的语义搜索和对数据按照不同的需求进行多样化显示等个性化服务;公司和企业要为客户创建和分发大量有价值的文档信息,以及对不同平台、不同格式的数据源进行有效的数据交换和集成等等。在这种大环境下,以简单易学、灵活通用著称的HTML,随着网络应用的日益广泛,局限性逐渐明显,越来越不能适应作为Intemet上信息交换和表示的工具了。 XML(eXtensible Markup Language)作为SGML(Standard Generalized MarkupLanguage)的一个优化子集,它不像HTML那样事先定义好一组标签,而是提供了一个标准,只要遵循这个标准,你可以灵活的定义自己的标记。XML不仅能够存储数据,而且能够存储结构和语义信息,具有通用的数据表示能力,能表示结构化、半结构化及元结构化数据,可以描述不同种类应用软件中的数据,这使其在数据交互和信息共享方面拥有天然的优势,成为Web上数据表示与交换的通用标准。 XML与HTML相比主要有以下几点优势: (1)XML简单,具有自我描述能力。通过语义标记来说明数据的语义,容易理解且易于解析。这使得XML具有机器可读性,具体应用可以按照各种方式解析、过滤及重构XML文档。 (2)XML具有灵活性。HTML的标记是预定义的,具有固定的名称及语义,不能扩展,而XML的标记可由用户定义,可以被任意的扩展。XML的嵌套结构可以表示各种复杂的数据结构,各种格式的数据都可以较容易的转换为XML数据,这使得XML非常适合于Web信息的发布和集成。 (3)XML具有平台独立性。XML可用于不同类型、系统间的交换格式的传送,从而简化了从一个应用程序到另一个应用程序之间传递信息的工作。 (4)XML实现了结构、内容和显示相分离。文档类型定义(DTD)或XML模式(XMLschema)描述了XML文档的结构,即元素间的嵌套关系。XML文档实例只描述数据,使得数据具有独立性,而XML文档的显示具有多样性,XML文档的显示是由XML文档配合XSL(eXtensible Style Language)来完成的,对同一个XML文档可以

xml与数据库中数据的导入导出

实验报告封面 课程名称: XML企业应用开发课程代码: SN3005 任课老师:江立实验指导老师: 江立 实验报告名称:作业二 学生姓名:马增群 学号: 1340112124 教学班: GX01 递交日期: 2015年12月15日 签收人: 我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。我已经保留了这份实验报告的副本。 申明人(签名):马增群实验报告评语与评分: 评阅老师签名:

一、实验名称:xml与数据库中数据的导入导出 二、实验日期:2015年12月15日 三、实验目的: 四、实验用的软件: XMLSpy2013 五、实验的步骤和方法: 实验前准备: 新建一个Java工程,工程名称为xmlDemo,文件目录如图所示:

src frame包:存放java的界面类。IndexFrame是索引界面类,ImportFrame是导入界面类,ExportFrame是导出界面类; service包:存放java的Service类。DBService是实现数据库操作的Service类,DBToXmlService是实现从数据库导出xml文件的Service类,XmlToDBService是实现从xml文件导入数据库的Service类; utils包:存放java的工具类。DBConnectionUtil是数据库连接的工具类; libs dom4j-1.6.1.jar:实现XML读取相关操作的价包; mysql-connector-5.1.8.jar:实现连接MySql数据库的价包; (1)数据库设计

实现了xml文件导出、xml文件导入功能。点击文件菜单可以看到两个选项

相关文档