一种快速读写xml的方式
对xml的处理方式多种多样。例如:
1.可以直接使用.NET中的XmlDocument操作xml文档,涉及XmlDocument、XmlTextReader、XmlElement 等对象的使用。
2.可以直接把xml当成字符串,然后采用正则表达式进行处理。
第一种xml处理方式会导致代码结构就像xml一样一层套一层,不够雅观(采用LINQ处理会好些);第二种方式在提取xml某些元素比较有用,也有局限性。其实,处理XML可以采用序列化、反序列化的机制进行处理。
由于.NET中可以把类对象序列化成xml文件,也可以从xml反序列成类对象。基于这个思想,处理一个有效的xml可以分为下列几步:
1.生成xml的schema文件
2.基于xml的schema文件构造一个对应的类文件,比如类名叫XmlMock
3.采用构造好的类XmlMock,从xml文件中反序列,初始化XmlMock对象
4.对XmlMock对象中的字段进行处理(增、删、改)
1、2参考:http://msdn.microsoft.com/zh-cn/library/x6c1kb0s(v=vs.80).aspx
主要使用xsd.exe(如果x64操作系统,C:\Program Files改成C:\Program Files (x86))
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe 或
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\xsd.exe
简单的使用方式
------------------------------------
cd C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin
xsd.exe test1.xml
xsd.exe test1.xsd /classes
------------------------------------
上述两步,即可生成test1.cs文件,类名是xml文件根节点的名字。
得到xml文件对应的类文件,剩下就是xml序列化、反序列化了。
1 /// <summary>
2 /// Convert serializable object to XML.
3 /// </summary>
4 public static string GetSerializedContent<T>(T xmlObj) where T : class
5 {
6 XmlSerializer serializer = new XmlSerializer(typeof(T));
7 MemoryStream stream = new MemoryStream();
8
9 serializer.Serialize(stream, xmlObj);
10 string xmlContent = string.Empty;
11 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
12 {
13 stream.Position = 0;
14 xmlContent = reader.ReadToEnd();
15 }
16
17 return xmlContent;
18 }
19
20 /// <summary>
21 /// deserialize xml content to xmlObj
22 /// </summary>
23 public static object DeserializeObject(Type ObjectType, string ObjectContent)
24 {
25 XmlSerializer serializer = new XmlSerializer(ObjectType);
26 byte[] buffer = Encoding.UTF8.GetBytes(ObjectContent);
27
28 MemoryStream stream = new MemoryStream(buffer);
29 return serializer.Deserialize(stream);
30 }
上述两个方法即可完成xml的序列化和反序列化。