需求:
access转复杂xml结构,非原始mdb字段结构直接生成xml
截取部分xml示例,要求winform、节点顺序及属性需一模一样
1、方案一:xmlserializer 序列化
1.1将各个节点转换为对应结构的实体类,应用特性有
[XmlElement("source-id")]:标记改字段节点名称 source-id
[XmlElement("issn", Namespace = "http://jats.nlm.nih.gov/archiving/1.1/xsd", IsNullable = false)]:标记改字段节点名称,Namespace 参数根据参数不同可以添加节点前的标记,此处生成节点名为jats:issn
[XmlAttribute("source-id-type")]:节点属性
[XmlText]:节点值
[XmlRoot("records", Namespace = "http://spec.nstl.gov.cn/namespace", IsNullable = false)]:声明该类映射命名空间,对应xmlns:
1.2序列化类实例为XML,并生成文件
/// <summary> /// 序列化类实例为XML,并生成文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static void SaveToXml(string filePath, object sourceObj) { if (!string.IsNullOrWhiteSpace(filePath) && sourceObj != null) { using (StreamWriter writer = new StreamWriter(filePath)) { XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add("mml", "http://www.w3.org/1998/Math/MathML"); namespaces.Add("xlink", "http://www.w3.org/1999/xlink"); namespaces.Add("jats", "http://jats.nlm.nih.gov/archiving/1.1/xsd"); namespaces.Add("mtl", "http://www.mulberrytech.com/taglib"); namespaces.Add("c", "http://www.w3.org/ns/xproc-step"); namespaces.Add("ali", "http://www.niso.org/schemas/ali/1.0"); namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType()); xmlSerializer.Serialize(writer, sourceObj, namespaces); } } }
1.3特点
优点:对节点赋值时若节点值为null,则该节点不显示
缺点:无法对子节点进行排序
2、方案二:Altova XMLSpy生成程序编码,引用后直接调用
2.1 生成程序编码
Altova XMLSpy打开xml实例对应的schema文件,DTD/模式>产生程序编码,勾选对应模版(这里用的是C#)。vs打开生成项目,编译后取Altova.dll、AltovaXML.dll、[schema名称].dll三个dll到开发环境下即可
2.2 调用Altova编码生成的dll
[schema名称] doc(实例名) = .CreateDocument("utf-8");
doc对象内有所有xml节点属性,主要方法有
Append();//添加该节点
Value属性//节点赋值
SaveToFile(string filename, bool prettyPrint) //生成xml文件
2.3 特点
优点:节点顺序和append顺序一致、底层代码自动生成
缺点:没有找到对应的api,Altova XMLSpy生成的代码只有一个简单例子(主程序注释部分)
3、方案三:linq to xml
没用过
4、方案四:XmlDocument 写文档
没用过,对于复杂xml,一个一个拼接的方式很折磨人
源码下载地址:
方案1、 http://download.csdn.net/download/zhanghuaiyu_35/10175822
方案2、http://download.csdn.net/download/zhanghuaiyu_35/10175826
Altova xmlSpy 2013中文破解版:
http://download.csdn.net/download/zhanghuaiyu_35/10175853